ON INIT

Postby fgondi » Thu Aug 07, 2008 4:34 pm

Antonio,

Se sabe algo de este tema?

Es algo que puede ser desarrollado? o implica muchos problemas
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby thefull » Fri Aug 08, 2008 8:21 am

fgondi wrote:Antonio,

Se sabe algo de este tema?

Es algo que puede ser desarrollado? o implica muchos problemas


Puff! Me olvidé del tema completamente...
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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Fri Aug 08, 2008 8:41 am

Lo tenemos en la lista de cosas pendientes de hacer, y tendremos que hacer bastantes pruebas para asegurarnos que no rompemos ningún programa funcionando :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: ON INIT

Postby Marcelo Via Giglio » Fri Mar 20, 2009 1:44 am

Holas,

bueno solo para volver a poner el tema en el tapete :-)

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: ON INIT

Postby Marcelo Via Giglio » Thu Aug 23, 2012 8:49 pm

Holas,

esto inicialmente funciona

Code: Select all  Expand view  RUN
#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


los cambios 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

Code: Select all  Expand view  RUN
Aeval( ::aControls,{|o| IF( o:bInit != NIL , Eval( o:bInit, o ),  NIL ) } )


antes del código

Code: Select all  Expand view  RUN
if ::bInit != nil
      lResult = Eval( ::bInit, Self )
      if ValType( lResult ) == "L" .and. ! lResult
         lFocus = .f.
      endif
   endif
 
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: ON INIT

Postby Marcelo Via Giglio » Wed Sep 11, 2013 11:27 am

Antonio,

las modificaciones sugeridas han funcionado sin problemas, será posible volver a evaluar la factibilidad de su implementación en FW.

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: ON INIT

Postby Antonio Linares » Wed Sep 11, 2013 11:56 am

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 ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: ON INIT

Postby Marcelo Via Giglio » Wed Sep 11, 2013 12:46 pm

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
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: ON INIT

Postby Antonio Linares » Wed Sep 11, 2013 1:23 pm

Marcelo,

La question es:

¿ Evaluamos los bInit de los controles antes que el bInit del diálogo ó despues ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: ON INIT

Postby Marcelo Via Giglio » Wed Sep 11, 2013 4:22 pm

Antonio,

that is the question :-)

yo lo puse antes, creo que eso asegura no romper con código previo

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: ON INIT

Postby Antonio Linares » Wed Sep 11, 2013 6:25 pm

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 ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: ON INIT

Postby fgondi » Thu Sep 12, 2013 7:59 am

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.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: ON INIT

Postby fgondi » Thu Sep 12, 2013 8:07 am

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.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: ON INIT

Postby Antonio Linares » Thu Sep 12, 2013 10:30 am

Actualmente desde la Clase TDialog, primero se inicializan los controles:

ASend( ::aControls, "INITIATE()", ::hWnd )

y luego se evalua el bInit del diálogo:

Code: Select all  Expand view  RUN
  if ::bInit != nil
      lResult = Eval( ::bInit, Self )
      if ValType( lResult ) == "L" .and. ! lResult
         lFocus = .f.
      endif
   endif


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() :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: ON INIT

Postby Antonio Linares » Thu Sep 12, 2013 10:33 am

Code: Select all  Expand view  RUN
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
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PreviousNext

Return to To do - WishList / Por hacer - Peticiones

Who is online

Users browsing this forum: No registered users and 8 guests