Page 2 of 2

Posted: Wed Oct 08, 2008 9:51 am
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



Posted: Wed Oct 08, 2008 11:16 am
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!!!

Posted: Wed Oct 08, 2008 12:24 pm
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

Posted: Wed Oct 08, 2008 2:05 pm
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!

Sigo con problemas!

Posted: Fri Oct 10, 2008 10:39 am
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!

Posted: Fri Oct 10, 2008 11:24 am
by Daniel Garcia-Gil
usa esto

oGetArticulo:lCancel = .T.

Posted: Fri Oct 10, 2008 3:49 pm
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.

Posted: Sat Oct 11, 2008 10:34 am
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.

Posted: Sat Oct 11, 2008 10:37 am
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!

Posted: Sat Oct 11, 2008 12:23 pm
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

Ok, así funciona, pero...

Posted: Sun Oct 12, 2008 8:09 am
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!