Problema con bLostFocus

User avatar
RenOmaS
Posts: 205
Joined: Fri Oct 07, 2005 5:07 pm

Post by RenOmaS »

Puedes hacer mas o menos algo asi

Code: Select all

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
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Post by triumvirato »

RenOmaS wrote:Puedes hacer mas o menos algo asi

Code: Select all

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!!!
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post by Armando »

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.

Image


Si necesitas más ayuda me pegas un grito.

Saludos
Last edited by Armando on Sat Oct 11, 2008 12:24 pm, edited 2 times in total.
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
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Post by triumvirato »

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.

Image


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!
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Sigo con problemas!

Post by triumvirato »

Bien, sigo con el mismo problema, después de pruebas y pruebas tengo lo siguiente:

Code: Select all

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!
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

usa esto

oGetArticulo:lCancel = .T.
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Post by triumvirato »

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.p ... =get+boton
http://67.222.39.232/forums/viewtopic.p ... get+action

He hecho todas las pruebas que se me han ocurrido, poniendo oGetArticulo:lCancel = .T. ó
oGetArticulo:oBtn: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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Post by triumvirato »

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.p ... get+action

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

Gracias!
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

David,

Este ejemplo aqui funciona bien con FWH 8.09 (estandard):

Code: Select all

#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
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Ok, así funciona, pero...

Post by triumvirato »

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:

Code: Select all

#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:

Code: Select all

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!
Post Reply