PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → WD - Como detectar tecla ENTER em um controle de edição (Alertkey, Presskey, KeyPress, Hotkey, Shortcut, Keyconst)
WD - Como detectar tecla ENTER em um controle de edição (Alertkey, Presskey, KeyPress, Hotkey, Shortcut, Keyconst)
Débuté par adrianoboller, 25 nov. 2015 13:26 - 3 réponses
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 25 novembre 2015 - 13:26
Prezados,

As pessoas sempre me perguntam como fazer para saber se uma tecla foi precionada e executar uma ação, entao vamos lá para mais um post. Existe diferentes formas de fazer isso.

a) Uma delas é colocar um botao na posição negativa da tela e colocar um SHORTCUT de tecla precionada, que esta no Description - GUI - Shortcut, informe a tecla e ok, após coloque o codigo nesse botao e tera a ação quando precionar a tecla.

Botão com a função: ESC









CODE:

// cancelation
MyWindow..ReturnedValue=gpwCancel
// closes the window
Close()


Ou Botão Valida faz uma ação com a tecla: F2

SWITCH RADIO_Action
// start the application
CASE 1: Open(WIN_0002_CallCenter,EDT_Login)

// management of groupware
CASE 2: Open(WIN_GPU_Main)

// cancelation
OTHER CASE: MyWindow..ReturnedValue=gpwCancel
END

// closes the window
Close


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 25 novembre 2015 - 13:43
A definição das constante usado pelo Windows para as teclas do teclado estão definidas no EVE.lparam ==> WM_KEYDOWN

As teclas de [0] a [9] = (Caracteres ("0") = 0x30 - charact ("9") = 0x39)

E de [A] a [Z] = (charact ("A") = 0x41 - charact ("Z") = 0x5A)

b) Portanto, a outra forma seria a seguinte:

//Globais do Projeto
//Winconst e Keyconst são necessárias para ativar o recurso em sua aplicação Windev para detectar as teclas precionadas no teclado.
EXTERN "WINCONST.wl"
EXTERN "KEYCONST.wl"


Agora crie uma Procedure Global

FUNCTION CheckKey(p_Mess is int, p_Par1 is int, p_Par2 is int)
Info(p_Par1) // aqui você tem o número de qualquer tecla pressionada
IF p_Par1 = 123 THEN //verifica o valor esperado e executa a captura de tela nesse exemplo
EndEvent(gv_EventPrint)
gp_PrintScreenLandscape(Handle(), "Web_UbenchInfo.IMG_ExpAfdruk" )
gv_EventPrint = Event("lp_CheckKey", "*.*", WM_KEYDOWN)
END


Agora, na seção de declaração da janela que voce quer usar a fuction, crie uma variavel em globais da janela:

GLOBAL
gv_EventPrint is int = Event("lp_CheckKey", "*.*", WM_KEYDOWN)
Info(gv_EventPrint)


Agora é só testar ok

--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 25 novembre 2015 - 13:52
c) para Webdev:

FUNCTION enterPressed()
{
var evnt = Event || window.event;
var code = evnt.charCode || evnt.keyCode;

RETURN (code == 13);
}


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 25 novembre 2015 - 14:37
Correção e ajustes do metodo B:

http://screencast.com/t/mQ0ohTmRY0P


//Globais do Projeto
//Winconst e Keyconst são necessárias para ativar o recurso em sua aplicação Windev para detectar as teclas precionadas no teclado.
EXTERN "WINCONST.wl"
EXTERN "KEYCONST.wl"


//Procedure Global Funcao CheckKey
Procedure CheckKey(nP_Mess is int, p_Par1 is int, nP_Par2 is int)

Info(nP_Mess, p_Par1, nP_Par2) // aqui você tem o número de qualquer tecla pressionada

IF p_Par1 = 123 THEN //verifica o valor esperado e executa a captura de tela nesse exemplo
Info(123)
END


//Aplicação de uso da funcao
Procedure MyWindow()
GLOBAL
gv_EventPrint is int = Event("CheckKey", "*.*", WM_KEYDOWN)
Info(gv_EventPrint)



//KEYCONST.wl
CONSTANT
VK_LBUTTON = 0x01
VK_RBUTTON = 0x02
VK_CANCEL = 0x03
VK_MBUTTON = 0x04

VK_BACK = 0x08
VK_TAB = 0x09

VK_CLEAR = 0x0C
VK_RETURN = 0x0D

VK_SHIFT = 0x10
VK_CONTROL = 0x11
VK_MENU = 0x12
VK_PAUSE = 0x13
VK_CAPITAL = 0x14

VK_KANA = 0x15
VK_HANGUL = 0x15
VK_JUNJA = 0x17
VK_FINAL = 0x18
VK_HANJA = 0x19
VK_KANJI = 0x19

VK_ESCAPE = 0x1B

VK_CONVERT = 0x1C
VK_NONCONVERT = 0x1D
VK_ACCEPT = 0x1E
VK_MODECHANGE = 0x1F

VK_SPACE = 0x20
VK_PRIOR = 0x21
VK_NEXT = 0x22
VK_END = 0x23
VK_HOME = 0x24
VK_LEFT = 0x25
VK_UP = 0x26
VK_RIGHT = 0x27
VK_DOWN = 0x28
VK_SELECT= 0x29
VK_PRINT = 0x2A
VK_EXECUTE = 0x2B
VK_SNAPSHOT= 0x2C
VK_INSERT = 0x2D
VK_DELETE = 0x2E
VK_HELP = 0x2F


VK_LWIN = 0x5B
VK_RWIN = 0x5C
VK_APPS = 0x5D

VK_NUMPAD0 = 0x60
VK_NUMPAD1 = 0x61
VK_NUMPAD2 = 0x62
VK_NUMPAD3 = 0x63
VK_NUMPAD4 = 0x64
VK_NUMPAD5 = 0x65
VK_NUMPAD6 = 0x66
VK_NUMPAD7 = 0x67
VK_NUMPAD8 = 0x68
VK_NUMPAD9 = 0x69
VK_MULTIPLY= 0x6A
VK_ADD = 0x6B
VK_SEPARATOR = 0x6C
VK_SUBTRACT = 0x6D
VK_DECIMAL= 0x6E
VK_DIVIDE = 0x6F
VK_F1 = 0x70
VK_F2 = 0x71
VK_F3 = 0x72
VK_F4 = 0x73
VK_F5 = 0x74
VK_F6 = 0x75
VK_F7 = 0x76
VK_F8 = 0x77
VK_F9 = 0x78
VK_F10 = 0x79
VK_F11 = 0x7A
VK_F12 = 0x7B
VK_F13 = 0x7C
VK_F14 = 0x7D
VK_F15 = 0x7E
VK_F16 = 0x7F
VK_F17 = 0x80
VK_F18 = 0x81
VK_F19 = 0x82
VK_F20 = 0x83
VK_F21 = 0x84
VK_F22 = 0x85
VK_F23 = 0x86
VK_F24 = 0x87

VK_NUMLOCK = 0x90
VK_SCROLL = 0x91

// These constants can only be used with KeyPressed() and
// with the following APIs: GetAsyncKeyState() and GetKeyState().
// These values are returned by no message or API. DON'T test them in WM_KEYDOWN.

VK_LSHIFT = 0xA0
VK_RSHIFT = 0xA1
VK_LCONTROL = 0xA2
VK_RCONTROL = 0xA3
VK_LMENU = 0xA4
VK_RMENU = 0xA5

VK_PROCESSKEY = 0xE5

VK_ATTN = 0xF6
VK_CRSEL = 0xF7
VK_EXSEL = 0xF8
VK_EREOF = 0xF9
VK_PLAY = 0xFA
VK_ZOOM = 0xFB
VK_NONAME = 0xFC
VK_PA1 = 0xFD
VK_OEM_CLEAR = 0xFE

END


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________