ON INIT

ON INIT

Postby thefull » Fri Jan 18, 2008 8:53 am

Antonio, una de las cosas que más 'rabia' que me da en Fivewin, es la que tener que realizar la INICIALIZACION de alguna cosa en el method ON INIT del correspondiente Dialogo/Ventana.

Creo que seria MUY INTERESANTE dotar una VARIABLE a la clase TCONTROL bINIT.

Asi, todos los controles pueden tener la clausula ON INIT que será lanzado en el method Initiate de la clase Dialog y/o en las que sean.

Entonces METHOD INITIATE() CLASS DIALOG,
simplemente debe de recorrer el ::aControls, evaluando los controles;

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


Asi, podemos hacer MUCHO mas legible el codigo;

Code: Select all  Expand view
DEFINE BUTTON oBtn ;
            ON INIT oBtn:Hide


¿ Que piensas sobre esta implementación ? La verdad es que llevaba la mosca detrás de la oreja sobre el como evitar tener que escribir 200 lineas en el ON INIT del Dialogo , y la verdad es que no me gustaba nada.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 707
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Mon Jan 21, 2008 7:17 am

Rafa,

Es una propuesta interesante, vamos a revisarla. Gracias! :-)
regards, saludos

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

Postby Antonio Linares » Mon Jan 21, 2008 7:21 am

De momento solo se me ocurre una pega:

¿ Cómo saber si los demás controles están inicializados ? Es decir, desde el ON INIT de un control no tendriamos la certeza de que los demás controles están inicializados, salvo que el orden de creación, marcase el orden de evaluación de cada bInit.

Desde un control B, no se podría acceder al control C (que no estaría inicializado), pero sí al A (que si lo estaría).

No se si se me entiende... :-)
regards, saludos

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

Postby thefull » Mon Jan 21, 2008 8:50 am

Antonio Linares wrote:De momento solo se me ocurre una pega:

¿ Cómo saber si los demás controles están inicializados ? Es decir, desde el ON INIT de un control no tendriamos la certeza de que los demás controles están inicializados, salvo que el orden de creación, marcase el orden de evaluación de cada bInit.

Desde un control B, no se podría acceder al control C (que no estaría inicializado), pero sí al A (que si lo estaría).

No se si se me entiende... :-)

Antonio, si, te entiendo ... ;-)

Creo que no debería haber ningún tipo de problema si la evaluacion se lleva a cabo en la creacion del Dialogo/Ventana, TAL Y COMO OCURRE actualmente.

Ahora , si supones que puedo evaluar bInit en otro punto, no he contemplado esa posibilidad.

Se supone que en ese punto, TODOS LOS CONTROLES ya estan inicializados, o no ?
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 707
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Mon Jan 21, 2008 9:02 pm

Rafa,

Bien, se podría hacer como dices: después de que todos los controles se hayan inicializado y antes ó después (?) del ON INIT del diálogo ?
regards, saludos

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

Re:

Postby thefull » Mon Jan 21, 2008 10:09 pm

Antonio Linares wrote:Rafa,

Bien, se podría hacer como dices: después de que todos los controles se hayan inicializado y antes ó después (?) del ON INIT del diálogo ?

Yo creo que debería ser ANTES, y que el ON INIT del diálogo/ventana sea lo último que deba de evaluarse, pero para gustos, los colores ;-)

Si mal no recuerdo, ahora no tengo acceso al fuente, la evaluacion del ON INT del dialogo se realizaba alguna cosa, pues que siga como hasta ahora. ;-)

De esta manera no se creará NINGUNA incompatibilidad con el código anterior a ningún usuario.
Asi, todo el que esta usando ON INIT, lo seguirá usando sin problemas, y puede añadir el código nuevo, sin ningún problema.
Vamos, tendremos lo mejor de los 2 mundos ;-)
Pero , es mi opinión Maestro, yo solo soy un humilde aprendiz ;-)
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 707
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Mon Jan 28, 2008 10:27 am

Rafa,

Como te comenté por teléfono, habrá que hacer pruebas para ver en que order exacto deberían evaluarse los bInit para que no surgiesen incompatibilidades con el código actual (ya que la claúsula ON INIT se usa mucho)
regards, saludos

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

Postby antolin » Sun Feb 03, 2008 11:05 am

En mi modesta opinión, es preferible inicializar el contenedor antes que el contenido. Dependiendo del tipo de window/dialogo los controles miden o se comportan de forma algo diferente. Por ejemplo, al final del metodo INITIATE del dialogo, no estaría mal.
Peaaaaaso de foro...
antolin
 
Posts: 469
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Postby thefull » Thu Feb 14, 2008 4:03 pm

antolin wrote:En mi modesta opinión, es preferible inicializar el contenedor antes que el contenido. Dependiendo del tipo de window/dialogo los controles miden o se comportan de forma algo diferente. Por ejemplo, al final del metodo INITIATE del dialogo, no estaría mal.


Pero es que el contenedor ya es inicializado!
Se trata de QUITAR del ON INIT del dialogo y ponerlo en el lugar que le corresponder, pero el problema que comenta Antonio es si tiene que evaluarse antes o despues.

Un ejemplo para entenderlo ;
Code: Select all  Expand view
// Actualmente;
@1,1 SAY oSay PROMPT "OCULTO" OF oDlg

ACTIVATE DIALOG oDlg ON INIT ( oSay:Hide, Eval( bPepe ) )


Internamente, la evaluacion del ON INIT , oDlg:bInit, se produce en el method Initiate(),;

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


Asi, la propuesta es que cada control tenga su ON INIT, independiente del ON INIT del dialogo, que lógicamente, se evaluará en el method Initiate() del dialogo;

Ejemplo;

Code: Select all  Expand view
// Actualmente;
@1,1 SAY oSay PROMPT "OCULTO" OF oDlg ;
        ON INIT oSay:HIde

ACTIVATE DIALOG oDlg ON INIT  Eval( bPepe )


Internamente, la evaluacion del ON INIT , oDlg:bInit, se produce en el method Initiate(), igualmente como hasta ahora y mi propuesta es
que se ejecute ANTES que el ON INIT del dialogo, que es lo más lógico,
y lógicamente, puedes seguir usandolo como hasta ahora.

Code: Select all  Expand view
   

Aeval( ::aControls,{|o|if( o:bInit != NIL , Eval( o:bInit, o ), ) }

if ::bInit != nil
      lResult = Eval( ::bInit, Self )
      if ValType( lResult ) == "L" .and. ! lResult
         lFocus = .f.
      endif
   endif


Yo creo que con esto se gana una legibilidad del codigo fuente MUY pero que MUY GRANDE, evitando MUCHOS errores en la codificación.

¿ Se entiende mejor ahora ?
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 707
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby antolin » Thu Feb 14, 2008 7:52 pm

Te he entendido, sólo que dijistes: "Yo creo que debería ser ANTES, y que el ON INIT del diálogo/ventana sea lo último que deba de evaluarse" y creo que debería inicializarse primero el dialogo y despues evaluar los distintos binit de los diferentes objetos.

Un saludo.
Peaaaaaso de foro...
antolin
 
Posts: 469
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Postby thefull » Sat Feb 16, 2008 11:01 am

antolin wrote:Te he entendido, sólo que dijistes: "Yo creo que debería ser ANTES, y que el ON INIT del diálogo/ventana sea lo último que deba de evaluarse" y creo que debería inicializarse primero el dialogo y despues evaluar los distintos binit de los diferentes objetos.

Un saludo.

Cuando decia ANTES, me referia ANTES de la evaluacion del binit del dialogo,
no ANTES de la creacion del dialogo ;-), que logicamente, no funcionaría.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 707
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Marcelo Via Giglio » Fri Jun 27, 2008 4:19 pm

Holas,

en que quedo el tema?? me parece muy util

saludos

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

Postby Antonio Linares » Fri Jun 27, 2008 4:32 pm

Marcelo,

En que habría que probar ambas soluciones (inicialización de controles antes ó despues del diálogo) y ver cual de ambas "rompe" menos código, ó si no llega a causar ningún problema.
regards, saludos

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

Postby Marcelo Via Giglio » Fri Jun 27, 2008 6:23 pm

Antonio Linares wrote:Marcelo,

En que habría que probar ambas soluciones (inicialización de controles antes ó despues del diálogo) y ver cual de ambas "rompe" menos código, ó si no llega a causar ningún problema.


Antonio,

para no romper nada como dice Rafa, pienso que la evaluacion de los binit de los controles que lo tengan definido, puede ser antes (junto con) el binit del dialogo, eso seria tan compatible como evaluar todos los binit en el INIT del dialogo, por lo tanto creo yo, que no habria ningun efecto colateral.

saludos

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

Postby Antonio Linares » Fri Jun 27, 2008 9:50 pm

Marcelo,

Hay que probarlo :-)
regards, saludos

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

Next

Return to To do - WishList / Por hacer - Peticiones

Who is online

Users browsing this forum: No registered users and 1 guest