¿Puede funcionar en dialogos?
Estoy generando los controles sin recursos, por puro código
Group me funciona en ventanas pero no en dialogos
- creswinman
- Posts: 33
- Joined: Thu Aug 24, 2006 3:14 am
- Location: mexico
- Contact:
Re: Group me funciona en ventanas pero no en dialogos
creswinman wrote:¿Puede funcionar en dialogos?
Estoy generando los controles sin recursos, por puro código
Antonio :
El Control TPanel si se puede incuir en un dialogo, el problema sucede cuando deseo integrar algun control dentro de el.
Mira este pequeño código :
Code: Select all | Expand
#include "FWCE.ch"
//----------------------------------------------------------------------------//
function Main()
local oWnd, oPanel
local cName := Space( 20 ), cAddress := Space( 30 )
DEFINE DIALOG oDlg FROM 1,1 TO 180,180 TITLE "Scroll" PIXEL
@ 1 , 1 PANEL oPanel OF oDlg SIZE oDlg:nWidth() - 26, oDlg:nHeight() - 48 PIXEL
@ 40, 1 SAY "Name:" OF oPanel SIZE 40, 15 PIXEL
@ 60, 1 GET cName OF oPanel SIZE 100, 18 PIXEL
@ 140, 1 SAY "Address:" OF oDlg SIZE 50, 15 PIXEL
@ 160, 1 GET cAddress OF oDlg SIZE 120, 18 PIXEL
ACTIVATE DIALOG oDlg
return nil
Y el error que manda es este
Message not found
TPANEL:DEFCONTROL
stack calls:
__ERRRT_SBASE(0)
HBOBJECT:ERROR(179)
__EVAL(105)
HBOBJECT:MSGNOTFOUND(0)
TPANEL:DEFCONTROL(169)
TSAY:NEW(0)
MAIN(13)
Donde se hace un llamado al método DefControl , donde se supone que esa clase la tiene TDialog y lo esta tratando de llamar en TPanel , ademas de que TPanel herera de TControl
Ahora si yo hago esta modificación en la clase TPanel
Code: Select all | Expand
/*
METHOD DefControl( oCtrl ) CLASS TPanel
DEFAULT oCtrl:nId := oCtrl:GetNewId()
if AScan( ::oWnd:aControls, { | o | o:nId == oCtrl:nId } ) > 0
#define DUPLICATED_CONTROLID 2
Eval( ErrorBlock(), _FWGenError( DUPLICATED_CONTROLID, ;
"No: " + Str( oCtrl:nId, 6 ) ) )
else
AAdd( ::oWnd:aControls, oCtrl )
oCtrl:hWnd = 0
endif
return nil
*/
Y ejecuto esta línea
ASend( ::aControls, "INITIATE()", ::hWnd )
Me manda otro mensaje de error de la clase que se esta iniciando.
Alguna sugerencia de por donde van los cables ?
Vikthor
- Antonio Linares
- Site Admin
- Posts: 42454
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 20 times
- Been thanked: 58 times
- Contact:
Vikthor,
Hazlo así:
Hazlo así:
Code: Select all | Expand
#include "FWCE.ch"
//----------------------------------------------------------------------------//
function Main()
local oWnd, oPanel
local cName := Space( 20 ), cAddress := Space( 30 )
DEFINE DIALOG oDlg FROM 1,1 TO 180,180 TITLE "Scroll" PIXEL
@ 1 , 1 PANEL oPanel OF oDlg SIZE oDlg:nWidth() - 26, oDlg:nHeight() - 48 PIXEL
@ 140, 1 SAY "Address:" OF oDlg SIZE 50, 15 PIXEL
@ 160, 1 GET cAddress OF oDlg SIZE 120, 18 PIXEL
ACTIVATE DIALOG oDlg ;
ON INIT PanelControls( oPanel )
return nil
function PanelControls( oPanel )
local cName := Space( 20 )
@ 40, 1 SAY "Name:" OF oPanel SIZE 40, 15 PIXEL
@ 60, 1 GET cName OF oPanel SIZE 100, 18 PIXEL
return nil
Antonio Linares wrote:Vikthor,
Hazlo así:Code: Select all | Expand
#include "FWCE.ch"
//----------------------------------------------------------------------------//
function Main()
local oWnd, oPanel
local cName := Space( 20 ), cAddress := Space( 30 )
DEFINE DIALOG oDlg FROM 1,1 TO 180,180 TITLE "Scroll" PIXEL
@ 1 , 1 PANEL oPanel OF oDlg SIZE oDlg:nWidth() - 26, oDlg:nHeight() - 48 PIXEL
@ 140, 1 SAY "Address:" OF oDlg SIZE 50, 15 PIXEL
@ 160, 1 GET cAddress OF oDlg SIZE 120, 18 PIXEL
ACTIVATE DIALOG oDlg ;
ON INIT PanelControls( oPanel )
return nil
function PanelControls( oPanel )
local cName := Space( 20 )
@ 40, 1 SAY "Name:" OF oPanel SIZE 40, 15 PIXEL
@ 60, 1 GET cName OF oPanel SIZE 100, 18 PIXEL
return nil
Antonio , gracias por tu pronta respuesta, haciendolo de esa forma la creación de los controles es correcta , solo tuve que hacer una pequeña modificación en la clase TPanel en el método New() para que el scroll funcionara correctamente.
Code: Select all | Expand
if ! Empty( ::oWnd:hWnd )
::Create("")
::oWnd:AddControl( Self )
DEFINE SCROLLBAR ::oVScroll VERTICAL OF Self
::oVScroll:SetRange( 0, 100 )
else
::oWnd:DefControl( Self )
DEFINE SCROLLBAR ::oVScroll VERTICAL OF Self
::oVScroll:SetRange( 0, 100 )
endif
Me podrías explicar por debemos de hacerlo de esa forma, también probé la clase TGroup y se comporta exactamente igual.
Vikthor
- Antonio Linares
- Site Admin
- Posts: 42454
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 20 times
- Been thanked: 58 times
- Contact: