ON INIT
Puff! Me olvidé del tema completamente...fgondi wrote:Antonio,
Se sabe algo de este tema?
Es algo que puede ser desarrollado? o implica muchos problemas
Yo solamente le veo ventajas
Haber si Antonio lo ha tenido en cuenta y lo pone en práctica cuando antes
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
-
- Posts: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: ON INIT
Holas,
bueno solo para volver a poner el tema en el tapete
saludos
Marcelo
bueno solo para volver a poner el tema en el tapete
saludos
Marcelo
-
- Posts: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: ON INIT
Holas,
esto inicialmente funciona
_ que se deben realizar son:
en los fuentes tget.prg y button.prg, en los metodos new, añadir un parametro al final binit, luego dentro el cuerpo de cada
metodo new añadir ::binit = binit
en la clase dialog en el metodo Initiate añadir la línea
antes del código
esto inicialmente funciona
Code: Select all
#include "fivewin.ch"
#xcommand @ <nRow>, <nCol> BUTTON [ <oBtn> PROMPT ] <cCaption> ;
[ SIZE <nWidth>, <nHeight> ] ;
[ ACTION <uAction> ] ;
[ <default: DEFAULT> ] ;
[ <of:OF, WINDOW, DIALOG> <oWnd> ] ;
[ <help:HELP, HELPID, HELP ID> <nHelpId> ] ;
[ FONT <oFont> ] ;
[ <pixel: PIXEL> ] ;
[ <design: DESIGN> ] ;
[ MESSAGE <cMsg> ] ;
[ <update: UPDATE> ] ;
[ WHEN <WhenFunc> ] ;
[ VALID <uValid> ] ;
[ <lCancel: CANCEL> ] ;
[ ON INIT <uInit> ] ;
=> ;
[ <oBtn> := ] TButton():New( <nRow>, <nCol>, <cCaption>, <oWnd>,;
<{uAction}>, <nWidth>, <nHeight>, <nHelpId>, <oFont>, <.default.>,;
<.pixel.>, <.design.>, <cMsg>, <.update.>, <{WhenFunc}>,;
<{uValid}>, <.lCancel.>, [{|Self|<uInit>}] )
#command @ <nRow>, <nCol> GET [ <oGet> VAR ] <uVar> ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ <pict: PICT, PICTURE> <cPict> ] ;
[ VALID <ValidFunc> ] ;
[ <color:COLOR,COLORS> <nClrFore> [,<nClrBack>] ] ;
[ SIZE <nWidth>, <nHeight> ] ;
[ FONT <oFont> ] ;
[ <design: DESIGN> ] ;
[ CURSOR <oCursor> ] ;
[ <pixel: PIXEL> ] ;
[ MESSAGE <cMsg> ] ;
[ <update: UPDATE> ] ;
[ WHEN <uWhen> ] ;
[ <lCenter: CENTER, CENTERED> ] ;
[ <lRight: RIGHT> ] ;
[ ON CHANGE <uChange> ] ;
[ <readonly: READONLY, NO MODIFY> ] ;
[ <pass: PASSWORD> ] ;
[ <lNoBorder: NO BORDER, NOBORDER> ] ;
[ <help:HELPID, HELP ID> <nHelpId> ] ;
[ ACTION <uAction> ] ;
[ BITMAP <cBmpName> ] ;
[ CUEBANNER <cCueText> ] ;
[ ON INIT <uInit> ] ;
=> ;
[ <oGet> := ] TGet():New( <nRow>, <nCol>, bSETGET(<uVar>),;
[<oWnd>], <nWidth>, <nHeight>, <cPict>, <{ValidFunc}>,;
<nClrFore>, <nClrBack>, <oFont>, <.design.>,;
<oCursor>, <.pixel.>, <cMsg>, <.update.>, <{uWhen}>,;
<.lCenter.>, <.lRight.>,;
[\{|nKey, nFlags, Self| <uChange>\}], <.readonly.>,;
<.pass.>, [<.lNoBorder.>], <nHelpId>,,,,,, [\{|self| <uAction> \}], <cBmpName>, <"uVar">,;
[<cCueText>], [{|Self|<uInit>}] )
//----------------------------------------------------------------------------//
function Main()
LOCAL oDlg, b, d := Date(), g
DEFINE DIALOG oDlg FROM 10,10 TO 30,30
@ 1,2 BUTTON "UNO" OF oDlg ACTION ( b:enable(), g:show() )
@ 3,2 BUTTON b PROMPT "DOS" OF oDlg ON INIT ::disable()
@ 6,2 GET g VAR d OF oDlg PICTURE '@d' ON INIT ::hide()
ACTIVATE DIALOG oDlg
return NIL
en los fuentes tget.prg y button.prg, en los metodos new, añadir un parametro al final binit, luego dentro el cuerpo de cada
metodo new añadir ::binit = binit
en la clase dialog en el metodo Initiate añadir la línea
Code: Select all
Aeval( ::aControls,{|o| IF( o:bInit != NIL , Eval( o:bInit, o ), NIL ) } )
Code: Select all
if ::bInit != nil
lResult = Eval( ::bInit, Self )
if ValType( lResult ) == "L" .and. ! lResult
lFocus = .f.
endif
endif
-
- Posts: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: ON INIT
Antonio,
las modificaciones sugeridas han funcionado sin problemas, será posible volver a evaluar la factibilidad de su implementación en FW.
saludos
Marcelo
las modificaciones sugeridas han funcionado sin problemas, será posible volver a evaluar la factibilidad de su implementación en FW.
saludos
Marcelo
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: ON INIT
Marcelo,
Es que no solo habría que implementarlo en esas dos clases, sino en todos los controles.
En todo caso, se podria incorporar la evaluación de todos los bInit, aunque su asignación tuviese que hacerse manual:
oControl:bInit = { || ... }
Asi solo hay que modificar la clase TDialog. Que te parece ?
Es que no solo habría que implementarlo en esas dos clases, sino en todos los controles.
En todo caso, se podria incorporar la evaluación de todos los bInit, aunque su asignación tuviese que hacerse manual:
oControl:bInit = { || ... }
Asi solo hay que modificar la clase TDialog. Que te parece ?
-
- Posts: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: ON INIT
Estimado Antonio,
me parece un buen inicio, el atributo o data bInit ya es parte de todos los controles de FW, lo unico que tenemos que hacer es utilizarlo, claro sería o será mejor dicho porque creo que gradualmente podrás modificar las definciones de los controles para que su uso sea mas comodo directamente con una clausula ON INIT <buser>, en lugar de instanciar el control en una variable de manera explicita y usar control:binit.
Y que si lo implementas inicialmente en los controles GET y BUTTONS (buttonbmp, button, btnbmp..) que son en los que mas se utilizarían esta funcionalidad
Muchas gracias por atender mi solicitud
saludos
Marcelo
me parece un buen inicio, el atributo o data bInit ya es parte de todos los controles de FW, lo unico que tenemos que hacer es utilizarlo, claro sería o será mejor dicho porque creo que gradualmente podrás modificar las definciones de los controles para que su uso sea mas comodo directamente con una clausula ON INIT <buser>, en lugar de instanciar el control en una variable de manera explicita y usar control:binit.
Y que si lo implementas inicialmente en los controles GET y BUTTONS (buttonbmp, button, btnbmp..) que son en los que mas se utilizarían esta funcionalidad
Muchas gracias por atender mi solicitud
saludos
Marcelo
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: ON INIT
Marcelo,
La question es:
¿ Evaluamos los bInit de los controles antes que el bInit del diálogo ó despues ?
La question es:
¿ Evaluamos los bInit de los controles antes que el bInit del diálogo ó despues ?
-
- Posts: 1033
- Joined: Fri Oct 07, 2005 3:33 pm
- Location: Cochabamba - Bolivia
Re: ON INIT
Antonio,
that is the question
yo lo puse antes, creo que eso asegura no romper con código previo
saludos
Marcelo
that is the question
yo lo puse antes, creo que eso asegura no romper con código previo
saludos
Marcelo
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: ON INIT
Marcelo,
Sigo teniendo mis dudas. Creo que lo lógico es que el contenedor (el diálogo) se inicialice completamente y que luego se inicialicen sus controles.
Alguien más que opine ?
Sigo teniendo mis dudas. Creo que lo lógico es que el contenedor (el diálogo) se inicialice completamente y que luego se inicialicen sus controles.
Alguien más que opine ?
Re: ON INIT
No sería mejor al reves?
Primero inicializar cada control y luego el contenedor
Cada control tendrá condiciones que sólo afectan este objeto.
Sin embargo en el dialogo se puede incluir condiciones que interactuen entre todos los controles.
Además incluyéndolo antes, evitamos problemas en las aplicaciones que ya están operativas.
Primero inicializar cada control y luego el contenedor
Cada control tendrá condiciones que sólo afectan este objeto.
Sin embargo en el dialogo se puede incluir condiciones que interactuen entre todos los controles.
Además incluyéndolo antes, evitamos problemas en las aplicaciones que ya están operativas.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Re: ON INIT
De todas formas, lo que hay que hacer es seguir el mismo criterio que hay para inicializar los objetos
Ahora mismo ¿Cuál es el orden al crear los objetos?
Pues ese mismo orden es el que se debería usar con bInit, sea el que sea.
Sino sería un lío. Los objetos se crean en un orden pero bInit se ejecuta en orden inverso.
Ahora mismo ¿Cuál es el orden al crear los objetos?
Pues ese mismo orden es el que se debería usar con bInit, sea el que sea.
Sino sería un lío. Los objetos se crean en un orden pero bInit se ejecuta en orden inverso.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Fernando González Diez
ALSIS GHE Sistemas Informáticos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: ON INIT
Actualmente desde la Clase TDialog, primero se inicializan los controles:
ASend( ::aControls, "INITIATE()", ::hWnd )
y luego se evalua el bInit del diálogo:
Me pregunto lo siguiente: Y si desde el Initiate() de los controles evaluamos sus bInit alli ? Sería lo más lógico, de igual forma que el bInit del diálogo se evalua desde su Initiate()
ASend( ::aControls, "INITIATE()", ::hWnd )
y luego se evalua el bInit del diálogo:
Code: Select all
if ::bInit != nil
lResult = Eval( ::bInit, Self )
if ValType( lResult ) == "L" .and. ! lResult
lFocus = .f.
endif
endif
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: ON INIT
Code: Select all
METHOD Initiate( hDlg ) CLASS TControl
DEFAULT ::lActive := .t., ::lDrag := .f., ::lCaptured := .f.,;
::lFocused := .f., ::lCancel := .f., ::lTransparent := .f.
if( ( ::hWnd := GetDlgItem( hDlg, ::nId ) ) != 0 )
If( ::lActive, ::Enable(), ::Disable() )
::Link()
if ::oFont != nil
::SetFont( ::oFont )
else
::GetFont()
endif
else
#define NOVALID_CONTROLID 1
Eval( ErrorBlock(), _FWGenError( NOVALID_CONTROLID, "No: " + ;
Str( ::nId, 6 ) ) )
endif
if ::lTransparent
::SetBrush( ::oWnd:oBrush )
endif
if ::bInit != nil
Eval( ::bInit, Self )
endif
return nil