Page 1 of 1

Uso Set Key

Posted: Wed Sep 23, 2009 3:50 pm
by jponce
Hola a todos .

Tengo un problema necesito controlar que con f3 f4, llame a dos funciones si a esas dos funciones las agrego en el action de un boton funcionan perfectamente me sale la pantalla que necesito que salga pero cuando presiono f3 o f4 me da error y estoy enviando los mismos datos que en los botones.

de esta forma declaro el set key

SET KEY VK_F3 TO ingresos( aGets, oLbx, oWnd, oSay, truefalse, oBrw, oBjeto )

y si en el btnbmp pongo en al Action ingresos( aGets, oLbx, oWnd, oSay, truefalse, oBrw, oBjeto )

Funciona correctamente.

Que puede estar mal?


Atentamente
Julio Ponce

Re: Uso Set Key

Posted: Wed Sep 23, 2009 4:42 pm
by Manuel Aranda
Prueba así:

SetKey(VK_F3, {|nKey| ingresos( aGets, oLbx, oWnd, oSay, truefalse, oBrw, oBjeto )})

Re: Uso Set Key

Posted: Wed Sep 23, 2009 8:05 pm
by jponce
Gracias pero no me funciono simpre me da error habra alguna otra manera de hacerlo

Re: Uso Set Key

Posted: Thu Sep 24, 2009 6:18 am
by Manuel Aranda
¿Qué error es?

Re: Uso Set Key

Posted: Thu Sep 24, 2009 12:06 pm
by MarioG
A ver si te sirve esta forma;
Tengo una barra de botones donde defino:
DEFINE SBUTTON aoBar[_BNewF] OF oBar ;
PROMPT "[F2] Nuevo"
ACTION ....

Activo botón:
aFunKeys[_F2] := SetKey( VK_F2, {|| aoBar[_BNewF]:KeyDown( VK_RETURN ) })
....
Desactivo botón (restauro a la accion anterio de la tecla):
SetKey( VK_F2, aFunKeys[_F2] )

Saludos

Re: Uso Set Key

Posted: Thu Sep 24, 2009 6:32 pm
by ADBLANCO
YO TENGO DEFINIDA UNA CLASE:

Code: Select all

****************************************************************************
CLASS TVKEY  // Clase para controlar teclas de funcion
****************************************************************************
      DATA OldKeys       INIT {SETKEY(VK_F1    ),;
                               SETKEY(VK_F2    ),;
                               SETKEY(VK_F3    ),;
                               SETKEY(VK_F4    ),;
                               SETKEY(VK_F5    ),;
                               SETKEY(VK_F6    ),;
                               SETKEY(VK_F7    ),;
                               SETKEY(VK_F8    ),;
                               SETKEY(VK_F9    ),;
                               SETKEY(VK_F10   ),;
                               SETKEY(VK_F11   ),;
                               SETKEY(VK_F12   ),;
                               SETKEY(VK_F13   ),;
                               SETKEY(VK_F14   ),;
                               SETKEY(VK_F15   ),;
                               SETKEY(VK_F16   ),;
                               SETKEY(VK_F17   ),;
                               SETKEY(VK_F18   ),;
                               SETKEY(VK_F19   ),;
                               SETKEY(VK_F20   ),;
                               SETKEY(VK_F21   ),;
                               SETKEY(VK_F22   ),;
                               SETKEY(VK_F23   ),;
                               SETKEY(VK_F24   ),;
                               SETKEY(VK_INSERT),;
                               SETKEY(VK_DELETE),;
                               SETKEY(VK_UP    ),;
                               SETKEY(VK_RIGHT ),;
                               SETKEY(VK_DOWN  ),;
                               SETKEY(VK_SELECT),;
                               SETKEY(VK_PRINT ),;
                               SETKEY(VK_ESCAPE),;
                               SETKEY(VK_RETURN),;
                               SETKEY(VK_PRIOR ),;
                               SETKEY(VK_NEXT  ),;
                               SETKEY(VK_HOME  ),;
                               SETKEY(VK_END   )}
      METHOD New() CONSTRUCTOR

      METHOD End()

  ENDCLASS

  METHOD New() CLASS TVKEY
    ::oldKeys[1] :=SETKEY(VK_F1    , NIL )
    ::oldKeys[2] :=SETKEY(VK_F2    , NIL )
    ::oldKeys[3] :=SETKEY(VK_F3    , NIL )
    ::oldKeys[4] :=SETKEY(VK_F4    , NIL )
    ::oldKeys[5] :=SETKEY(VK_F5    , NIL )
    ::oldKeys[6] :=SETKEY(VK_F6    , NIL )
    ::oldKeys[7] :=SETKEY(VK_F7    , NIL )
    ::oldKeys[8] :=SETKEY(VK_F8    , NIL )
    ::oldKeys[9] :=SETKEY(VK_F9    , NIL )
    ::oldKeys[10]:=SETKEY(VK_F10   , NIL )
    ::oldKeys[11]:=SETKEY(VK_F11   , NIL )
    ::oldKeys[12]:=SETKEY(VK_F12   , NIL )
    ::oldKeys[13]:=SETKEY(VK_F13   , NIL )
    ::oldKeys[14]:=SETKEY(VK_F14   , NIL )
    ::oldKeys[15]:=SETKEY(VK_F15   , NIL )
    ::oldKeys[16]:=SETKEY(VK_F16   , NIL )
    ::oldKeys[17]:=SETKEY(VK_F17   , NIL )
    ::oldKeys[18]:=SETKEY(VK_F18   , NIL )
    ::oldKeys[19]:=SETKEY(VK_F19   , NIL )
    ::oldKeys[20]:=SETKEY(VK_F20   , NIL )
    ::oldKeys[21]:=SETKEY(VK_F21   , NIL )
    ::oldKeys[22]:=SETKEY(VK_F22   , NIL )
    ::oldKeys[23]:=SETKEY(VK_F23   , NIL )
    ::oldKeys[24]:=SETKEY(VK_F24   , NIL )
    ::oldKeys[25]:=SETKEY(VK_INSERT, NIL )
    ::oldKeys[26]:=SETKEY(VK_DELETE, NIL )
    ::oldKeys[27]:=SETKEY(VK_UP    , NIL )
    ::oldKeys[28]:=SETKEY(VK_RIGHT , NIL )
    ::oldKeys[29]:=SETKEY(VK_DOWN  , NIL )
    ::oldKeys[30]:=SETKEY(VK_SELECT, NIL )
    ::oldKeys[31]:=SETKEY(VK_PRINT , NIL )
    ::oldKeys[32]:=SETKEY(VK_ESCAPE, NIL )
    ::oldKeys[33]:=SETKEY(VK_RETURN, NIL )
    ::oldKeys[34]:=SETKEY(VK_PRIOR , NIL )
    ::oldKeys[35]:=SETKEY(VK_NEXT  , NIL )
    ::oldKeys[36]:=SETKEY(VK_HOME  , NIL )
    ::oldKeys[37]:=SETKEY(VK_END   , NIL )
    Return self

  METHOD End() CLASS TVKEY
    SETKEY(VK_F1    ,::OldKeys[ 1])
    SETKEY(VK_F2    ,::OldKeys[ 2])
    SETKEY(VK_F3    ,::OldKeys[ 3])
    SETKEY(VK_F4    ,::OldKeys[ 4])
    SETKEY(VK_F5    ,::OldKeys[ 5])
    SETKEY(VK_F6    ,::OldKeys[ 6])
    SETKEY(VK_F7    ,::OldKeys[ 7])
    SETKEY(VK_F8    ,::OldKeys[ 8])
    SETKEY(VK_F9    ,::OldKeys[ 9])
    SETKEY(VK_F10   ,::OldKeys[10])
    SETKEY(VK_F11   ,::oldKeys[11])
    SETKEY(VK_F12   ,::oldKeys[12])
    SETKEY(VK_F13   ,::oldKeys[13])
    SETKEY(VK_F14   ,::oldKeys[14])
    SETKEY(VK_F15   ,::oldKeys[15])
    SETKEY(VK_F16   ,::oldKeys[16])
    SETKEY(VK_F17   ,::oldKeys[17])
    SETKEY(VK_F18   ,::oldKeys[18])
    SETKEY(VK_F19   ,::oldKeys[19])
    SETKEY(VK_F20   ,::oldKeys[20])
    SETKEY(VK_F21   ,::oldKeys[21])
    SETKEY(VK_F22   ,::oldKeys[22])
    SETKEY(VK_F23   ,::oldKeys[23])
    SETKEY(VK_F24   ,::oldKeys[24])
    SETKEY(VK_INSERT,::oldKeys[25])
    SETKEY(VK_DELETE,::oldKeys[26])
    SETKEY(VK_UP    ,::oldKeys[27])
    SETKEY(VK_RIGHT ,::oldKeys[28])
    SETKEY(VK_DOWN  ,::oldKeys[29])
    SETKEY(VK_SELECT,::oldKeys[30])
    SETKEY(VK_PRINT ,::oldKeys[31])
    SETKEY(VK_ESCAPE,::oldKeys[32])
    SETKEY(VK_RETURN,::oldKeys[33])
    SETKEY(VK_PRIOR ,::oldKeys[34])
    SETKEY(VK_NEXT  ,::oldKeys[35])
    SETKEY(VK_HOME  ,::oldKeys[36])
    SETKEY(VK_END   ,::oldKeys[37])

    Return nil
 
Y LA UTILIZO ASÍ

Code: Select all

FUNCTION PEPE(oDlgAnt)
LOCAL oFkey,bButEmit,oButEmit
DEFAULT oDlgAnt:=oWnd
oFKey:=tvkey():NEW   // CLASE TVKEY (control de teclas de funcion)
SETKEY(VK_F9,     { || EVAL(bButEmit)   } )
  bButEmit     := { || IIF(oButEmit:lActive,(EVAL(bButDisable),;
                         MSGRUN("Espere, Grabando los Registros",,{||graB_part(.T.)}),;
                          imp_licos()      ,;
                          EVAL(bButEnable) ,;
                          oButGuard:Disable()),)}
.
.
  DEFINE DIALOG oDlg RESOURCE "PEPE"  OF  oDlgAnt                       
.
.
.
          REDEFINE BUTTON  oButEmit   ID  109  OF oDlg;
               MESSAGE "Presione para Imprimir"   ;
               PROMPT  "[F9]-Imprimir"            ;
               ACTION  EVAL(bButEmit)
 ACTIVATE DIALOG oDlg CENTER    

  oFKey:End()
  RETURN lRet

 
ESPERO TE SIRVA DE ALGO

Re: Uso Set Key

Posted: Thu Sep 24, 2009 6:40 pm
by ADBLANCO
CON ESTA CLASE Y TRABAJANDO DE ESTA FORMA SI DESACTIVAS DEL BOTON DE UNA VEZ QUEDA DESACTIVADA LA TECLA DE FUNCION

A MI ME TRABAJA DE LAS MIL MARAVILLAS

SUERTE

POSDATA (DE PASO ACABO DE HACER UN APORTE AL GRUPO DE USUARIOS)

Re: Uso Set Key

Posted: Thu Sep 24, 2009 6:55 pm
by ADBLANCO
VERIFICA QUE TENGAS

#INCLUDE "INKEY.CH"

Re: Uso Set Key

Posted: Thu Sep 24, 2009 8:22 pm
by karinha
Marabilloso! :wink:

Re: Uso Set Key

Posted: Fri Sep 25, 2009 5:39 am
by mmercado
Hola Angel:
ADBLANCO wrote:YO TENGO DEFINIDA UNA CLASE:
Me parece genial tu idea para simplificar el código en el manejo de bloques asociados a las teclas, gracias.

Me he tomado el atrevimiento de proponer algunos ajustes a tu clase (claro, respetando tu idea)

En mi propuesta estoy agregando el parámetro "aSel" en la creación del objeto TVKey, con este parámetro (que es un array) pretendo que se puedan manejar localmente solamente algunas de las acciones (o todas) asociados a las teclas.

Como ejemplo si quiero conservar las acciones asignadas a todas las teclas con excepción de las teclas F2 y F5 que quiero manejar localmente:

oVKey := TVKey():New( { VK_F2, VK_F5 } )

Aquí muestro un programa de ejemplo incluyendo mi propuesta de modificación a tu clase:

Code: Select all

#include "FiveWin.ch"

Function Main()

   Local oWnd

   SetKey( VK_F9, { || MsgInfo( "Asignación original de VK_F9 desde oWnd", "Prueba" ), fLocalVkey() } )

   Define Window oWnd Title "Prueba de la clase TVKey de ADBLANCO"

   SET MESSAGE TO "Presiona la tecla F9" OF oWnd CLOCK DATE KEYBOARD NOINSET 2007

   Activate Window oWnd

Return Nil

Static Function fLocalVkey()

   Local oDlg, ;
         oVKey := TVKey():New()

   SetKey( VK_F9, { || MsgInfo( "Asignación local de VK_F9 desde oDlg", "Prueba" ), oDlg:End() } )

   Define Dialog oDlg Title "Cambiando localmente la acción con F9"

   @ 10, 10 Say "Presiona F9" Of oDlg Pixel

   Activate Dialog oDlg Centered

   oVKey:End()

Return Nil

****************************************************************************
CLASS TVKey  // Clase para controlar teclas de funcion
* Autor ADBLANCO
****************************************************************************
   DATA OldActions

   METHOD New( aSel ) CONSTRUCTOR

   METHOD End()

ENDCLASS

****************************************************************************

METHOD New( aSel ) CLASS TVKey

   Local nEle

   Default aSel := { VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6, VK_F7, VK_F8, VK_F9, VK_F10, VK_F11, VK_F12, ;
                     VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20, VK_F21, VK_F22, VK_F23, ;
                     VK_F24, VK_INSERT, VK_DELETE, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_SELECT, VK_PRINT, ;
                     VK_ESCAPE, VK_RETURN, VK_PRIOR, VK_NEXT, VK_HOME, VK_END, VK_NUMLOCK, VK_SCROLL }

   ::OldActions := Array( Len( aSel ) )

   For nEle := 1 To Len( aSel )
      ::OldActions[ nEle ] := { aSel[ nEle ], SetKey( aSel[ nEle ], Nil ) }
   Next

Return Self

****************************************************************************

METHOD End() CLASS TVKey

   Local nEle

   For nEle := 1 To Len( ::OldActions )
      SetKey( ::OldActions[ nEle, 1 ], ::OldActions[ nEle, 2 ] )
   Next

Return Nil
Gracias nuevamente y disculpa el atrevimiento.

Un abrazo.

Manuel Mercado Gómez.

Re: Uso Set Key

Posted: Fri Sep 25, 2009 12:46 pm
by ADBLANCO
Gracias!, Maestro. :lol:
Es todo un honor que te haya gustado mi humilde aporte :oops:
La mejora que tu propones ya la voy a implementar, porque Realmente le agrega Flexibilidad a la clase.

Nota:
Me gustaría Saber es si J.ponce consiguió resolver su problema.

Re: Uso Set Key

Posted: Sat Sep 26, 2009 1:14 pm
by jponce
Gracias ya esta solucionado mi problema con el aporte de todos ustedes.

muchas gracias