Group me funciona en ventanas pero no en dialogos

Post Reply
User avatar
creswinman
Posts: 33
Joined: Thu Aug 24, 2006 3:14 am
Location: mexico
Contact:

Group me funciona en ventanas pero no en dialogos

Post by creswinman »

¿Puede funcionar en dialogos?
Estoy generando los controles sin recursos, por puro código
User avatar
Vikthor
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Re: Group me funciona en ventanas pero no en dialogos

Post 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 _ ?
Vikthor
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Vikthor
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Post 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.
Vikthor
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply