Group me funciona en ventanas pero no en dialogos

Group me funciona en ventanas pero no en dialogos

Postby creswinman » Fri Sep 15, 2006 7:06 pm

¿Puede funcionar en dialogos?
Estoy generando los controles sin recursos, por puro código
User avatar
creswinman
 
Posts: 33
Joined: Thu Aug 24, 2006 3:14 am
Location: mexico

Re: Group me funciona en ventanas pero no en dialogos

Postby Vikthor » Wed Sep 20, 2006 3:51 am

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 view
#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 view
/*
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
User avatar
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Postby Antonio Linares » Wed Sep 20, 2006 7:37 am

Vikthor,

Hazlo así:
Code: Select all  Expand view
#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
Antonio Linares
Site Admin
 
Posts: 42079
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Vikthor » Thu Sep 21, 2006 1:29 pm

Antonio Linares wrote:Vikthor,

Hazlo así:
Code: Select all  Expand view
#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 view
   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
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Postby Antonio Linares » Thu Sep 21, 2006 4:19 pm

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


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 30 guests