FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con bLostFocus
Posts: 205
Joined: Fri Oct 07, 2005 05:07 PM
Problema con bLostFocus
Posted: Wed Oct 08, 2008 09:51 AM
Puedes hacer mas o menos algo asi

Local lFocus := .F.

REDEFINE GET oGet VAR ........
oGet:bGotFocus := { || lFocus := .T. }
oGet:bLostFocus := { |o,h| If( h == oBtn:hWnd, , ; //tomo el foco el btn
                               lFocus := .F. ) }

REDEFINE BUTTON oBtn ID .... OF oDlg ;
                ACTION ......, oGet:SetFocus() ;
                WHEN lFocus
Saludos/regards

RenOmaS



skype: americo.balboa
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Problema con bLostFocus
Posted: Wed Oct 08, 2008 11:16 AM
RenOmaS wrote:Puedes hacer mas o menos algo asi

Local lFocus := .F.

REDEFINE GET oGet VAR ........
oGet:bGotFocus := { || lFocus := .T. }
oGet:bLostFocus := { |o,h| If( h == oBtn:hWnd, , ; //tomo el foco el btn
                               lFocus := .F. ) }

REDEFINE BUTTON oBtn ID .... OF oDlg ;
                ACTION ......, oGet:SetFocus() ;
                WHEN lFocus


Gracias por tu ayuda, pero o algo no estoy entendiendo o no hago bien. El VALID del get sigue evaluando y por tanto no consigo realizar la acción del ACTION del botón... en cuanto el GET pierde el foco, evalúa el VALID y si no contiene un valor adecuado, no permite salir él (precisamente el ACTION del botón lo que hace es una búsqueda de esa valor adecuado)

Gracias!!!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Problema con bLostFocus
Posted: Wed Oct 08, 2008 12:24 PM
Triumvirato:

Si te interesa y gracias a José Murugosa en el siguiente link puedes encontrar la clase BtnGet32.

http://www.box.net/shared/lck9effuyn

Este es un ejemplo de cómo se ve.




Si necesitas más ayuda me pegas un grito.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Problema con bLostFocus
Posted: Wed Oct 08, 2008 02:05 PM
Armando wrote:Triumvirato:

Si te interesa y gracias al José Murugosa en el sisguiente link puedes encontrar la clase BtnGet32.

http://www.box.net/shared/lck9effuyn

Este es un ejemplo de cómo se ve.




Si necesitas más ayuda me pegas un grito.

Saludos


Armando,

Muchas gracias por tu ayuda. Espero hacerlo funcionar, ya comentaré el resultado. Muchas muchas gracias!!!

Saludos!
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Sigo con problemas!
Posted: Fri Oct 10, 2008 10:39 AM
Bien, sigo con el mismo problema, después de pruebas y pruebas tengo lo siguiente:

REDEFINE GET oGetArticulo VAR cArticulo ID 140 OF oDlg PICTURE '@!S12' UPDATE;
      ACTION Bus_Art( oDlg, oGetArticulo );
      BITMAP "basket.bmp";
      VALID ( Clave_Ok( "Art", cArticulo, 1 ) )

   oGetArticulo:bGotFocus := { || SetKey( VK_F2, { || Bus_Art( oDlg, oGetArticulo ) } ) }
   oGetArticulo:bLostFocus := { || SetKey( VK_F2, nil ) }


El botón del GET y el SetKey (tecla F2), hacen lo mismo, abren un diálogo de búsqueda, para encontrar el dato que ha de contener el GET. Por tanto, una vez situados en ese campo, si pulsamos F2 se abre un nuevo diálogo donde hacemos la búsqueda y este devuelve el valor seleccionado sin problemas.
El problema está, que cuando pulsamos el botón del Get que ha de hacer lo mismo, se evalúa la cláusula del VALID y como no contiene un valor correcto, está en blanco, no permite que se abra el nuevo diálogo para realizr la búsqueda del dato que ha de contener.
La función Clave_Ok devuelve .T. ó .F. y simplemente hace una búsqueda del valor introducido en una base de datos.
Lo curioso del caso, es que SetKey se salta el VALID sin problemas, mientras que el botón de búsqueda no lo hace.

Sugerencias??
Gracias!

Saludos!
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Problema con bLostFocus
Posted: Fri Oct 10, 2008 11:24 AM

usa esto

oGetArticulo:lCancel = .T.

Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Problema con bLostFocus
Posted: Fri Oct 10, 2008 03:49 PM
mcfox wrote:usa esto

oGetArticulo:lCancel = .T.


Gracias mcfox, había leído los hilos donde se trató el mismo tema:

http://67.222.39.232/forums/viewtopic.php?t=12832&highlight=get+boton
http://67.222.39.232/forums/viewtopic.php?t=12994&highlight=get+action

He hecho todas las pruebas que se me han ocurrido, poniendo oGetArticulo:lCancel = .T. ó
oGetArticulo:lCancel = .T.
Tanto después del redefine del Get, como en la cláusula ON INIT del diálogo e incluso añadiéndo la línea que dice Antonio en el último post, pero no obtengo que no se avalúe el VALID de ese Get...
Sé que debo hacer algo mal... pero no doy con ello, además que en teoría debería bastar con haber modificado la clase, pero no se soluciona...

Gracias!

EDITO: Desde la cláusula ON INIT, FUNCIONA!!!! (estaba poniendo mal el nombre del Get) pero modificando la clase como indica Antonio en el último post del segundo hilo, no funciona.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problema con bLostFocus
Posted: Sat Oct 11, 2008 10:34 AM

David,

En FWH 8.10 que publicaremos posiblemente este mismo fin de semana, el botón que usa el GET cuando se usa la claúsula ACTION ... ya tiene asignado la DATA lCancel como .T. para que no se dispare el VALID.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Problema con bLostFocus
Posted: Sat Oct 11, 2008 10:37 AM
Antonio Linares wrote:David,

En FWH 8.10 que publicaremos posiblemente este mismo fin de semana, el botón que usa el GET cuando se usa la claúsula ACTION ... ya tiene asignado la DATA lCancel como .T. para que no se dispare el VALID.


Antonio,

Agregué a la clase la línea que mencionabas en este hilo:

http://67.222.39.232/forums/viewtopic.php?t=12994&highlight=get+action

Y con eso no funcinó... lo comento por si es necesaria su revisión.

Gracias!
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problema con bLostFocus
Posted: Sat Oct 11, 2008 12:23 PM
David,

Este ejemplo aqui funciona bien con FWH 8.09 (estandard):
#include "FiveWin.ch"

function Main()

   local oDlg, oGet, cTest := Space( 20 )
   
   DEFINE DIALOG oDlg
   
   @ 2, 2 GET oGet VAR cTest ACTION MsgInfo( "action" ) VALID ( MsgInfo( "valid" ), .T. )
   
   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT oGet:oBtn:lCancel := .T.
   
return nil

La acción del botón no ejecuta el VALID
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Ok, así funciona, pero...
Posted: Sun Oct 12, 2008 08:09 AM
Antonio,

El código que has puesto ahí, a mí también me funciona correctamente, ahora bien, si quitamos la cláusula del ON INIT y habiendo modificado la clase como indicas, deja de funcionar:

#include "FiveWin.ch" 

function Main() 

   local oDlg, oGet, cTest := Space( 20 ) 
    
   DEFINE DIALOG oDlg 
    
   @ 2, 2 GET oGet VAR cTest ACTION MsgInfo( "action" ) VALID ( MsgInfo( "valid" ), .T. ) 
    
   ACTIVATE DIALOG oDlg CENTERED
    
return nil


En este ejemplo, la primera vez que pulsas el botón, se ejecuta el VALID, si pulsas seguido otra vez, se ejecuta el ACTION porque tiene el foco el botón. Si pulsamos seguido de nuevo el botón, se vuelve a ejecutar el VALID y así alternativamente.
A lo que me refiero, es que con modificar la clase como comentaste en su día no es suficiente:
Antonio Linares wrote:Ruben,

Rectifico! :-) Ya lo habíamos arreglado para facilitar su uso.

Si está arreglado, y estará incluido en la versión 8.10. Hay que añadir esta línea aqui:
METHOD CreateButton() CLASS TGet

   ...
      ::oBtn:lCancel = .T. // so the GET VALID is not fired when the button is focused   
   endif   
   
return nil


Espero haberme explicado mejor.

Saludos!

Continue the discussion