Page 1 of 1

Problema con un GET (SOLUCIONADO)

PostPosted: Fri Feb 04, 2022 2:32 am
by Armando
Saludos amigos foreros:

Hoy acudo a ustedes con un problema en un GET, les muestro mi código

Code: Select all  Expand view

        REDEFINE GET aGets[06] VAR oWrk:PRO ID 301 OF oDlg UPDATE;
            WHEN ! Empty(AllTrim(oHdr:EOS));
            BITMAP "Bus16";
            PICTURE "@Z 99999";
            ACTION oWrk:PRO := BrwPro(oDlg);
            VALID ValPro(oDlg,aGets);       <=======================
            MESSAGE "Número de producto"
....
....
....
....

STATIC FUNCTION ValPro(oDlg,aGets)
          MsgInfo("Validando!")
RETURN(.T.)
 


El problema es que si salgo del get con la tecla TAB (Tabulador) la función ValPro no se
ejecuta, por consecuencia no se muestra el mensaje "Validando!", peeeero, si salgo
del GET con la tecla RETURN, entonces sí se ejecuta la función ValPro.

Es normal este comportamiento?

Gracias por el apoyo

Ahh, utilizo Harbour y FWH 2012

Re: Problema con un GET

PostPosted: Fri Feb 04, 2022 11:49 am
by hmpaquito
Hola,

Quizas tengas que añadir y adaptar el siguiente codigo al evento TGet.prg:KeyDown()

Code: Select all  Expand view
...
      #Define MI_VALID(lBajar) ( ::lValid( ) )
      case nKey == VK_TAB .and. GetKeyState( VK_SHIFT )
           if ::bChange != nil
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L" .and. lAccept
                 IF MI_VALID(.f.)
                    ::oWnd:GoPrevCtrl( ::hWnd )
                 ENDIF
              endif
           else
              IF MI_VALID(.f.)
                 ::oWnd:GoPrevCtrl( ::hWnd )
              ENDIF
           endif
           return 1

      case nKey == VK_TAB .or. nKey == VK_RETURN

           if ::bChange != nil
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L" .and. lAccept

                 IF MI_VALID(.T.)
                    ::oWnd:GoNextCtrl( ::hWnd )
                 ENDIF

              endif
           else
              IF MI_VALID(.T.)
                 ::oWnd:GoNextCtrl( ::hWnd )
              ENDIF
           endif
           return 1

Re: Problema con un GET

PostPosted: Fri Feb 04, 2022 12:38 pm
by karinha
Armando, super simples asi:

Code: Select all  Expand view

#include "fivewin.ch"

#Define  VK_TAB           9

STATIC oWnd

FUNCTION Main()

   LOCAL oMenu

   MENU oMenu

      MenuItem "From Code" action FromCode( oWnd )

      MenuItem "Salida" action( oWnd:End() )

   endmenu

   define window oWnd title "Teste: VK_TAB for Armando" MENU oMenu pixel

   activate window oWnd MAXIMIZED

RETURN( oWnd )

FUNCTION FromCode( oWnd )

   LOCAL oDlg, nKey
   LOCAL oGet1, oGet2, oGet3, oGet4
   LOCAL cVar1, cVar2, cVar3, cVar4
   LOCAL lActive := .F.

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0

   define dialog oDlg title "Validando VK_TAB" pixel size 300, 300

   oDlg:LhELPiCON := .F.

   @ 10, 10 GET oGet1 VAR cVar1 bitmap "..\bitmaps\on.bmp"              ;
      action( msginfo( "With VK_TAB     " ) ) of oDlg pixel size 60, 12 ;
      VALID( ValPro( nKey := VK_TAB, oDlg, oGet1 ) )

   @ 40, 10 GET oGet2 VAR cVar2 bitmap "..\bitmaps\on.bmp" ;
      action( msginfo( "Without Transparent" ) ) of oDlg pixel size 60, 12

   @ 70, 10 GET oGet3 VAR cVar3 bitmap "..\bitmaps\chkyes.bmp"       ;
      action( msginfo( "With Adjust-Transparent" ) ) of oDlg pixel   ;
      size 120, 12

   @ 100, 10 GET oGet4 VAR cVar4 bitmap "..\bitmaps\chkyes.bmp"      ;
      action( if( lActive, oGet3:disable(), oGet3:enable() ),        ;
                  lActive := !lActive, oDlg:update() ) of oDlg pixel ;
      size 120, 12

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   oGet4:lAdjustBtn      := .T.

   activate dialog oDlg centered

   RETURN NIL

STATIC FUNCTION ValPro( nKey, oDlg, oGet1 )

   IF GETASYNCKEY( VK_UP )
      RETURN( .F. )
   ENDIF

   IF GETASYNCKEY( VK_DOWN )
      RETURN( .T. )
   ENDIF

   IF GETASYNCKEY( VK_TAB )
      MsgInfo( "Validando VK_TAB.", "Armando" )
   ENDIF

   // .OR.
   IF nKey == VK_TAB
      // QUIT
   ENDIF

RETURN( .T. )
 


Regards, saludos.

Re: Problema con un GET

PostPosted: Sat Feb 05, 2022 4:33 am
by Armando
Karinha:

Con tu sugerencia no pasa por la función ValPro(), tal vez no entendí bien tu sugerencia.

hmpaquito:

No soy muy ducho en modificar clases, esta es lo que hay en el TGet.Prg

Code: Select all  Expand view

      case nKey == VK_TAB .and. GetKeyState( VK_SHIFT )
           if ::bChange != nil .and. ( ::oGet:Changed .or. ::oGet:UnTransform() != ::oGet:Original )
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L" .and. lAccept
                 if ::oWnd:IsKindOf( "TCOMBOBOX" )
                    ::oWnd:oWnd:GoPrevCtrl( ::hWnd )
                 else
                    ::oWnd:GoPrevCtrl( ::hWnd )
                 endif
              endif
           else
              if ::oWnd:IsKindOf( "TCOMBOBOX" )
                 ::oWnd:oWnd:GoPrevCtrl( ::hWnd )
              else
                 ::oWnd:GoPrevCtrl( ::hWnd )
              endif
           endif
           return 0

      case nKey == VK_TAB .or. nKey == VK_RETURN
           if ::bChange != nil .and. ( ::oGet:Changed .or. ::oGet:UnTransform() != ::oGet:Original )
              lAccept = Eval( ::bChange, nKey, nFlags, Self )
              if ValType( lAccept ) == "L"
                 if lAccept
                    ::oWnd:GoNextCtrl( ::hWnd )
                 endif
              else
                 ::oWnd:GoNextCtrl( ::hWnd )
              endif
           else
              ::oWnd:GoNextCtrl( ::hWnd )
           endif

           #ifndef __CLIPPER__
               if nKey == VK_RETURN  // Execute DEFPUSHBUTTON Action
                  ::Super:KeyChar( nKey, nFlags )
               endif
           #endif

           if lAnd( ::nStyle, ES_RIGHT )
              ::Refresh()
           endif

           return 0
 


Saludos y gracias por el apoyo

Re: Problema con un GET

PostPosted: Sat Feb 05, 2022 1:53 pm
by karinha
Code: Select all  Expand view

#include "fivewin.ch"

STATIC oWnd

FUNCTION Main()

   LOCAL oMenu

   MENU oMenu

      MenuItem "From Code" action FromCode( oWnd )

      MenuItem "Salida" action( oWnd:End() )

   endmenu

   define window oWnd title "Teste: VK_TAB for Armando" MENU oMenu pixel

   activate window oWnd MAXIMIZED

RETURN( oWnd )

FUNCTION FromCode( oWnd )

   LOCAL oDlg, nKey
   LOCAL oGet1, oGet2, oGet3, oGet4
   LOCAL cVar1, cVar2, cVar3, cVar4
   LOCAL lActive := .F.

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0

   define dialog oDlg title "Validando VK_TAB" pixel size 300, 300

   oDlg:LhELPiCON := .F.

   /*
   @ 10, 10 GET oGet1 VAR cVar1 bitmap "..\bitmaps\on.bmp"              ;
      action( msginfo( "With VK_TAB     " ) ) of oDlg pixel size 60, 12 ;
      VALID( ValPro( nKey := VK_TAB, oDlg, oGet1 ) )
   */


   // .OR.:
   @ 10, 10 GET oGet1 VAR cVar1 bitmap "..\bitmaps\on.bmp"              ;
      ACTION( ValPro( oDlg, oGet1 ) ) of oDlg pixel size 60, 12         ;
      VALID( ValPro( oDlg, oGet1 ) )

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1
   oGet1:lAdjustBtn      := .T.

   @ 40, 10 GET oGet2 VAR cVar2 bitmap "..\bitmaps\on.bmp" ;
      action( msginfo( "Without Transparent" ) ) of oDlg pixel size 60, 12

   @ 70, 10 GET oGet3 VAR cVar3 bitmap "..\bitmaps\chkyes.bmp"       ;
      action( msginfo( "With Adjust-Transparent" ) ) of oDlg pixel   ;
      size 120, 12

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   @ 100, 10 GET oGet4 VAR cVar4 bitmap "..\bitmaps\chkyes.bmp"      ;
      action( if( lActive, oGet3:disable(), oGet3:enable() ),        ;
                  lActive := !lActive, oDlg:update() ) of oDlg pixel ;
      size 120, 12

   oGet4:lAdjustBtn      := .T.

   activate dialog oDlg centered

RETURN NIL
// otro modo Armando:
STATIC FUNCTION ValPro( oDlg, oGet1 )

   IF GETASYNCKEY( VK_UP )
      RETURN( .F. )
   ENDIF

   IF GETASYNCKEY( VK_DOWN )
      RETURN( .T. )
   ENDIF

   IF GETASYNCKEY( VK_TAB )

      MsgInfo( "Validando con <VK_TAB>", "Armando" )

   ELSE

      MsgInfo( "Validando con <ENTER>", "Armando" )

   ENDIF

RETURN( .T. )

/*
STATIC FUNCTION ValPro( nKey, oDlg, oGet1 )

   IF GETASYNCKEY( VK_UP )
      RETURN( .F. )
   ENDIF

   IF GETASYNCKEY( VK_DOWN )
      RETURN( .T. )
   ENDIF

   IF GETASYNCKEY( VK_TAB )
      MsgInfo( "Validando VK_TAB.", "Armando" )
   ENDIF

   // .OR.
   IF nKey == VK_TAB
      // QUIT
   ENDIF

RETURN( .T. )
*/

 


Regards, saludos.

Re: Problema con un GET

PostPosted: Sun Feb 06, 2022 6:32 am
by JESUS MARIN
Buenos dias

Y si añades .... ?

Code: Select all  Expand view

        REDEFINE GET aGets[06] VAR oWrk:PRO ID 301 OF oDlg UPDATE;
            WHEN ! Empty(AllTrim(oHdr:EOS));
            BITMAP "Bus16";
            PICTURE "@Z 99999";
            ACTION oWrk:PRO := BrwPro(oDlg);
            MESSAGE "Número de producto"
 
            aGets[06]:bLostFocus := { || ValPro(oDlg,aGets) }

....
....
....
....

STATIC FUNCTION ValPro(oDlg,aGets)
          MsgInfo("Validando!")
RETURN(.T.)
 

Re: Problema con un GET

PostPosted: Mon Feb 07, 2022 12:38 am
by Armando
Jesús:

Agradezco el interés por apoyar, pero no, no va a la función VALPRO()
Así es como tengo el código.

Llego a la conclusión que es un problema de la función TGET, a ver si Antonio
nos puede dar un poco de luz, ANTONIO ?????

Code: Select all  Expand view

        REDEFINE GET aGets[06] VAR oWrk:PRO ID 301 OF oDlg UPDATE;
         WHEN ! Empty(AllTrim(oHdr:EOS));
            BITMAP "Bus16";
            PICTURE "@Z 99999";
            ACTION oWrk:PRO  := BrwPro(oDlg);
            VALID ValPro(oDlg,aGets);
            MESSAGE "Número de producto"

         aGets[06]:bLostFocus := { || ValPro(oDlg,aGets) }
 


Saludos

Re: Problema con un GET

PostPosted: Mon Feb 07, 2022 9:28 am
by JESUS MARIN
Buenos dias Armando
He hecho una prueba con la clase TGet y funciona en ambos casos.

Seguramente estas usando otra clase (que yo no tengo en mi versión), TGetBmp o TGetButton, pues tienes asociado una acción a un boton.

Prueba, si lo deseas, este código y veras que funciona.

Code: Select all  Expand view

STATIC FUNCTION PRUEBAS_ARMANDO()


LOCAL aGet:=ARRAY(2)
LOCAL aVar:=ARRAY(2)
LOCAL oDlg


DEFINE DIALOG oDlg SIZE 500,200 TITLE "PRUEBAS PARA ARMANDO"

@10,010 SAY "Código original (VALID)"      OF oDlg SIZE 80,20 PIXEL
@10,110 SAY "Código modificado (bLostFocus)"    OF oDlg SIZE 80,20 PIXEL

aVar[1]:="dato 1"
aVar[2]:=0.01


@30,010 GET aGet[1] VAR aVar[1] OF oDlg SIZE 080,15 PIXEL VALID ValPro(oDlg,aGet)
@30,110 GET aGet[2] VAR aVar[2] OF oDlg SIZE 080,15 PIXEL
   aGet[2]:bLostFocus := { || ValPro(oDlg,aGet) }


@80,10 BUTTON "Cerrar"  OF oDlg SIZE 50,15 PIXEL ACTION  oDlg:End()

ACTIVATE DIALOG oDlg CENTER

RETURN(NIL)


STATIC FUNCTION ValPro(oDlg,aGet)

          MsgInfo("Validando!")
RETURN(.T.)



 

Re: Problema con un GET (SOLUCIONADO)

PostPosted: Mon Feb 07, 2022 7:38 pm
by Armando
Amigos:

Antes que nada, les pido una disculpa por el tiempo invertido tratando de apoyarme.

El problema es que tenia yo un RETURN antes de la validación.

Disculpen mi burrada.

Saludos