Page 1 of 1

Identificar/Determinar como se pierde focus..

PostPosted: Sun Sep 19, 2010 5:45 pm
by Raymundo Islas M.
Antonio/Daniel,

Tengo algunos GETs que tienen una validacion digamos :

- Si escribo algo, busco que exista en catalogo
- Si existe lo muestro
- Si no existe mando el mansaje y regreso al mismo get

- Si esta vacio, el focus brinca a otro control

Ahora, si quiero pasarme a otra pestaña, obviamente el get pierde el focus, pero de inmediato me valida y como esta vacio se brinca al otro control.
Eso significa que debo dar 2 click para poder pasarme a la pestaña.

Que debo hacer para decirle cuando pierde focus via teclado : enter, tab, etc o cuando es por mouse y asi sepa si deba validar o no.


Saludos

Re: Identificar/Determinar como se pierde focus..

PostPosted: Sun Sep 19, 2010 7:01 pm
by Ruben Fernandez
Raymundo: Si te entrendí, en el Valid deberías de establecer esas condiciones.
Quizas con bChange del get tengas alguna oportunidad, es lo que se me ocurre.

Re: Identificar/Determinar como se pierde focus..

PostPosted: Sun Sep 19, 2010 7:19 pm
by Carles
Raymundo,

En tu funcion de validacion

Code: Select all  Expand view
FUNCTION MiValid()

   IF oPestaña:lFocused
       RETU .T.
   ENDIF

   ...

RETU lOk

 

Re: Identificar/Determinar como se pierde focus..

PostPosted: Tue Sep 21, 2010 2:43 pm
by triumvirato
Raymundo,

Prueba a poner la cláusula CANCEL en la definición del FOLDER, precisamente se utiliza para eso. Te dejo un pequeño ejemplo en el que el get tiene un VALID y el folder está definido con la cláusula CANCEL. El problema mayor reside en que el usuario se puede mover por todas las pestañas del folder sin tener en cuenta los VALID. Deberás controlar este aspecto, aunque no creo que te de problemas.

Code: Select all  Expand view

#include "fivewin.ch"

function Main()

   local oDlg, oFld, cName1 := "       "

   DEFINE DIALOG oDlg TITLE "FiveWin Dynamic folders" ;
      FROM 5, 5 TO 20, 49

   @ 0.5, 1 FOLDER oFld PROMPT "&xBase", "&And OOP", "&Power" ;
      OF oDlg SIZE 160, 90 CANCEL
     
   @ 1, 1 BUTTON "&Hello" OF oFld:aDialogs[ 1 ] ;
     ACTION MsgInfo( "Hello world!" )
     
   @ 4,1 GET cName1  OF oFld:aDialogs[ 1 ] COLORS "B/BG" VALID !Empty( cName1 )

   @ 5.5, 11 BUTTON "Ok" OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

return nil

 

Re: Identificar/Determinar como se pierde focus..

PostPosted: Tue Sep 21, 2010 3:46 pm
by Raymundo Islas M.
Ruben,
Sip, al parecer en la funcion del valid ahi esta el embrollo del asunto, ya estoy analizando linea por linea para ver donde puedo corregir.

Carles,
Lo que indicas funciona parecido a una condicion que tenia, donde si no hay nada por procesar regresa el .t.

Triumvirato,
Efectivamente, puede funcionar, salvo ver que validaciones puede afectar para re-validarlas antes de algun proceso importante : grabar, procesar, etc.

Entre sus sugerencias y lo que tengo saldria la solucion, ahora, si hubiese la manera de saber algo como: oGet:nLastKeyPressed todo estaria resuelto.


Saludos y Gracias

Re: Identificar/Determinar como se pierde focus..

PostPosted: Tue Sep 21, 2010 4:35 pm
by triumvirato
Raymundo,

Se me ocurre así de pronto algo como:

Code: Select all  Expand view

oGet:bGotfocus := { || oFld:lCancel := .t. }
oGet:bLostFocus := { || oFld:lCancel := .f.}
 


Esto con el get donde te sucede el problema.

Saludos!