Page 1 of 1
ctrl+U - como la detecto?
Posted: Wed Nov 28, 2007 12:59 am
by rolando
Buenas noches,
Necesito, dentro de un diálogo, detectar cuando se haya pulsado la combinación de teclas "Ctrl + U" que antes usaba en Clipper (chr 21)
hago esto:
oDlg:bKeyDown := {|nK| if(nK==21, ...hacer una cosa... , ....hace otra cosa ) }
Pero siempre me detecta la primera de las dos que presiono (17 para Ctrol y 85 para U).
¿Como puedo hacerlo?.
Gracias.
Rolando
Posted: Wed Nov 28, 2007 8:41 am
by Antonio Linares
... if( nK == 85 .and. GetKeyState( VK_CONTROL ), ...
Posted: Wed Nov 28, 2007 10:51 am
by rolando
Buen día,
Gracias por responder pero, sigue sin funcionar.
para testear hice:
oDlg:bKeyDown := {|nK| if(nK == 85 .and. GetKeyState( VK_CONTROL ) , msginfo('21') , msginfo(str(nK)) ) }
Y siempre detecta el caracter 17.
¿Debo hacer una funcióna para esto o hay algo que me falta?
Gracias.
Rolando
Posted: Wed Nov 28, 2007 11:00 am
by Antonio Linares
El 85 es la U mayúscula. Usa entonces el 17:
{|nK| If( nK == 17 .and. GetKeyState( VK_CONTROL ), ...
Posted: Wed Nov 28, 2007 11:03 am
by karinha
Code: Select all
DO CASE
CASE ( nKey == Asc( "A" ) .OR. nKey == Asc( "a" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+A-For Nilson'
CASE ( nKey == Asc( "B" ) .OR. nKey == Asc( "b" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+B-For Nilson'
CASE ( nKey == Asc( "C" ) .OR. nKey == Asc( "c" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+C-For Nilson'
CASE ( nKey == Asc( "D" ) .OR. nKey == Asc( "d" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+D-For Nilson'
CASE ( nKey == Asc( "E" ) .OR. nKey == Asc( "e" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+E-For Nilson'
CASE ( nKey == Asc( "F" ) .OR. nKey == Asc( "f" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+F-For Nilson'
CASE ( nKey == Asc( "G" ) .OR. nKey == Asc( "g" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+G-For Nilson'
CASE ( nKey == Asc( "H" ) .OR. nKey == Asc( "h" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+H-For Nilson'
CASE ( nKey == Asc( "I" ) .OR. nKey == Asc( "i" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+I-For Nilson'
CASE ( nKey == Asc( "P" ) .OR. nKey == Asc( "p" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+P-For Nilson'
CASE ( nKey == Asc( "T" ) .OR. nKey == Asc( "t" ) ) .AND. ;
GetKeyState( VK_CONTROL )
? 'Control+T-For Nilson'
//CASE ( nKey == Asc( "Z" ) .OR. nKey == Asc( "z" ) ) .AND. ;
// GetKeyState( VK_CONTROL )
// ? 'Control+Z-For Nilson'
CASE ( nKey == VK_INSERT .AND. GetKeyState( VK_SHIFT ) ) .OR. ;
( nKey == ASC( "V" ) .AND. GetKeyState( VK_CONTROL ) ) .OR. ;
( nKey == ASC( 'X' ) .AND. GetKeyState( VK_CONTROL ) )
? ' Multiplas-For Nilson'
/*
CASE nKey==VK_F12
? 'F12-For Nilson'
*/
CASE ( nKey == VK_F2 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F2-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F3 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F3-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F4 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F4-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F5 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F5-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F6 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F6-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F7 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F7-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F8 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F8-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F9 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F9-For Nilson'
// Acao(Action) do seu programa
//CASE ( nKey == VK_F10 .AND. GetKeyState( VK_CONTROL ) )
// ? 'Control+F10-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F11 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F11-For Nilson'
// Acao(Action) do seu programa
CASE ( nKey == VK_F12 .AND. GetKeyState( VK_CONTROL ) )
? 'Control+F12-For Nilson'
// Acao(Action) do seu programa
ENDCASE
Posted: Wed Nov 28, 2007 11:06 am
by rolando
Sigo con el mismo problema, ahora detecta apenas se presiona solamente la tecla ctrl.
Lo que necesito es que detecte cuando están ambas presionadas, CTRL y u.
Gracias.
Rolando
Posted: Wed Nov 28, 2007 11:10 am
by Antonio Linares
Debería funcionarte así, como te ha mostrado Joao:
{|nK| If( ( nK == Asc( "u" ) ) .and. GetKeyState( VK_CONTROL ), ...
Posted: Wed Nov 28, 2007 11:18 am
by rolando
Gracias, por la tarde lo probaré ya que mi labor diaria me llama.
Rolando
PRUEBA CON ESTO
Posted: Wed Nov 28, 2007 6:29 pm
by JARO
rolando,
este codigo me funciona bien
#include "FiveWin.ch"
function Main()
local oDlg
DEFINE DIALOG oDlg TITLE "PRUEBA DE PULSACION DE TECLA"
ODLG:BKEYDOWN:={|NKEY|ULTTECLA(NKEY)}
ACTIVATE DIALOG oDlg CENTERED
return nil
FUNCTION ULTTECLA(NKEY)
// yo por si las "_" he anulado las teclas de combinación como
// ctrl en este caso
IF NKEY=17
RETURN NIL
ENDIF
IF NKEY=85 .AND. GetKeyState( 17 )
?"hola" // Aqui pones la funcion que quieras ejecutar
ENDIF
return nil
Espero que te sirva
Posted: Wed Nov 28, 2007 9:23 pm
by rolando
Gracias, ya lo solucioné. Usé como base la función de Jaro que es algo similar a lo de Joao.
Rolando