Problema con un GET (SOLUCIONADO)

Problema con un GET (SOLUCIONADO)

Postby Armando » Fri Feb 04, 2022 2:32 am

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
Last edited by Armando on Mon Feb 07, 2022 7:36 pm, edited 1 time 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
User avatar
Armando
 
Posts: 3209
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Problema con un GET

Postby hmpaquito » Fri Feb 04, 2022 11:49 am

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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Problema con un GET

Postby karinha » Fri Feb 04, 2022 12:38 pm

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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Problema con un GET

Postby Armando » Sat Feb 05, 2022 4:33 am

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

Re: Problema con un GET

Postby karinha » Sat Feb 05, 2022 1:53 pm

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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7804
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Problema con un GET

Postby JESUS MARIN » Sun Feb 06, 2022 6:32 am

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.)
 
Jesús Marín
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Problema con un GET

Postby Armando » Mon Feb 07, 2022 12:38 am

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

Re: Problema con un GET

Postby JESUS MARIN » Mon Feb 07, 2022 9:28 am

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.)



 
Jesús Marín
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Problema con un GET (SOLUCIONADO)

Postby Armando » Mon Feb 07, 2022 7:38 pm

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: cmsoft and 56 guests