Page 1 of 1

Group me funciona en ventanas pero no en dialogos

Posted: Fri Sep 15, 2006 7:06 pm
by creswinman
¿Puede funcionar en dialogos?
Estoy generando los controles sin recursos, por puro código

Re: Group me funciona en ventanas pero no en dialogos

Posted: Wed Sep 20, 2006 3:51 am
by Vikthor
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

#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

/*
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 _ ?

Posted: Wed Sep 20, 2006 7:37 am
by Antonio Linares
Vikthor,

Hazlo así:

Code: Select all

#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

Posted: Thu Sep 21, 2006 1:29 pm
by Vikthor
Antonio Linares wrote:Vikthor,

Hazlo así:

Code: Select all

#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

   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.

Posted: Thu Sep 21, 2006 4:19 pm
by Antonio Linares
Vikthor,

Cuando se crea un diálogo desde código fuente se construye un RC en memoria. En un RC no se pueden especificar controles hijos de controles. Es una limitación de los ficheros RC. Sólo el dialogo principal y sus controles hijos.