FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con un GET (SOLUCIONADO)
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Problema con un GET (SOLUCIONADO)
Posted: Fri Feb 04, 2022 02:32 AM
Saludos amigos foreros:

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

Code (fw): Select all Collapse
聽 聽 聽 聽 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
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: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Problema con un GET
Posted: Fri Feb 04, 2022 11:49 AM
Hola,

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

Code (fw): Select all Collapse
...
聽 聽 聽 #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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Problema con un GET
Posted: Fri Feb 04, 2022 12:38 PM
Armando, super simples asi:

Code (fw): Select all Collapse
#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
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Problema con un GET
Posted: Sat Feb 05, 2022 04: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 (fw): Select all Collapse
      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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Problema con un GET
Posted: Sat Feb 05, 2022 01:53 PM
Code (fw): Select all Collapse
#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
Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Problema con un GET
Posted: Sun Feb 06, 2022 06:32 AM
Buenos dias

Y si a帽ades .... ?

Code (fw): Select all Collapse
聽 聽 聽 聽 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
deumare@gmail.com
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Problema con un GET
Posted: 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 (fw): Select all Collapse
        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
Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Problema con un GET
Posted: Mon Feb 07, 2022 09: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 (fw): Select all Collapse
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
deumare@gmail.com
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Problema con un GET (SOLUCIONADO)
Posted: Mon Feb 07, 2022 07: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

Continue the discussion