Page 1 of 1

Ayuda, es algo sencillo con Set Key

PostPosted: Fri Dec 19, 2008 1:47 am
by fespinoza
Hola foro, a los tiempos una pregunta.

Tengo el siguiente código usando Set Key, que lo ubico al inicio del programa y me sirve para llamar a una rutina oculta en cualquier momento dentro de la aplicación.

SET KEY VK_F2 TO Bienvenido()


Qquiero saber como sería la sentencia si quiero usar una combinación de teclas, como por ejemplo Ctrl+F9.

Saludos desde Ecuador

Fernando Espinoza

Re: Ayuda, es algo sencillo con Set Key

PostPosted: Fri Dec 19, 2008 5:10 am
by FranciscoA
fespinoza wrote:Hola foro, a los tiempos una pregunta.

Tengo el siguiente código usando Set Key, que lo ubico al inicio del programa y me sirve para llamar a una rutina oculta en cualquier momento dentro de la aplicación.

SET KEY VK_F2 TO Bienvenido()


Qquiero saber como sería la sentencia si quiero usar una combinación de teclas, como por ejemplo Ctrl+F9.

Saludos desde Ecuador

Fernando Espinoza


Mira si es esto lo que deseas:

oWnd:bKeyDown := { |nKey| IIF(nKey == VK_F6 .and. GetKeyState(VK_CONTROL) .AND. GetKeyState(VK_TAB), MiChequeo(), IF(nKey == VK_F5 .and. GetKeyState(VK_CONTROL) .AND. GetKeyState(VK_TAB), WinExec("winword "+"wcont.ini"),) )}

Saludos.

PostPosted: Fri Dec 19, 2008 8:39 am
by Biel EA6DD
como te comenta Francisco es una forma de hacerlo, otra que quizas te quede mas claro, es asignando la funcion a la tecla F9
Code: Select all  Expand view
SET KEY VK_F9 TO Funcion()

y en la funcion comprobar si se ha pulsado control.
Code: Select all  Expand view
FUNCTION Funcion()
    IF ! GETKEYSTATE( VK_CONTROL )
        ? "CTRL-F9"
    ELSE
         RETURN NIL
    ENDIF
...

PostPosted: Fri Dec 19, 2008 12:00 pm
by fespinoza
Amigos, gracias por sus respuestas, voy a probar las 2 opciones y les aviso

PostPosted: Wed Dec 24, 2008 12:55 pm
by fespinoza
Estimados Biel, Francisco

Probe sus sugerencias, pero no tengo resultados positivos , porque la combinaciòn de teclas aplastadas debe ser al mismo tiempo (como cuando se hacia Ctrl+PrintScreen), y con lo que me enviaron detecta el ingreso de las teclas de forma individual uno por uno (es decir primero detecta F9 luego el control) y no como una combinacion al mismo tiempo.

Alguna sugerencia adicional.

Saludos

Fernando Espinoza

PostPosted: Wed Dec 24, 2008 3:28 pm
by cuatecatl82
Estimado Colega Fernando:

yo lo hago de esta manera y me funciona bien..
Ojala y sea lo que buscas..

Code: Select all  Expand view
#Include "FIVEWIN.CH"
#Include "VKEY.CH"

Function Main()

Define Window oWndMain .. ..
(Ya sabes como va todo esto..)

oWndMain:bKeyDown = { | nKey | ACCESOS(nKey) }  //Esto llama a las teclas combinadas

Activate Window oWndMain


//--------------------------//
STATIC FUNCTION ACCESOS(nKey)

/****************************************************
  Para accesar con la Tecla CTRL  + A := CASE ( nKey == ASC( "A" ) .OR. nKey == ASC( "a" ) ) .AND. GetKeyState( VK_CONTROL )
  Para accesar con la Tecla SHIFT + A := CASE ( nKey == ASC( "A" ) .OR. nKey == ASC( "a" ) ) .AND. GetKeyState( VK_SHIFT )
  Para accesar con la Tecla CTRL  + F2:= CASE ( nKey == VK_F2 .AND. GetKeyState( VK_CONTROL ) )
  Para accesar con la Tecla SHIFT + F2:= CASE ( nKey == VK_F2 .AND. GetKeyState( VK_SHIFT ) )
  Para accesar con la Tecla         F2:= CASE ( nKey == VK_F2 )
  Se pueden Usar la teclas "Especiales como: Enter, Retroceso, Flechas de Movimiento, Sup, Ins, Inicio, Final, etc. Revisar el Archivo VKEY.CH"
****************************************************/

//msginfo(nKey)

DO CASE

CASE ( nKey == VK_F2 )
MsgInfo("Uno")
CASE ( nKey == VK_F3 )
MsgInfo("Dos")
CASE ( nKey == VK_F4 )
MsgInfo("Tres")
CASE ( nKey == VK_RETURN   .AND. GetKeyState( VK_CONTROL ) )     
MsgInfo("Cuatro")
CASE ( nKey == VK_ADD      .AND. GetKeyState( VK_CONTROL ) )     
MsgInfo("Cinco")
CASE ( nKey == VK_SUBTRACT .AND. GetKeyState( VK_CONTROL ) )     
MsgInfo("Seis")
CASE ( nKey == VK_MULTIPLY .AND. GetKeyState( VK_CONTROL ) )     
MsgInfo("Siete")
CASE ( nKey == ASC( "C" ) .OR. nKey == ASC( "c" ) ) .AND. GetKeyState( VK_SHIFT ) 
MsgInfo("Ocho")
CASE ( nKey == ASC( "B" ) .OR. nKey == ASC( "b" ) ) .AND. GetKeyState( VK_CONTROL )     
MsgInfo("Nueve")   
CASE ( nKey == ASC( "F" ) .OR. nKey == ASC( "f" ) ) .AND. GetKeyState( VK_CONTROL )
MsgInfo("Diez")   
ENDCASE

RETURN( .T. )


Espero que pases una muy Feliz Navidad...

Un fuerte abrazo.. :lol: :D 8)

PostPosted: Wed Dec 24, 2008 5:36 pm
by fespinoza
Estimado Cuatecatl82,

Voy a probar y de antemano gracias por todo.