Olá pessoal…
Hoje vou mostrar como desenvolver chamadas de funções via teclas de atalho no AdvPL (Protheus) e mostrar uma listagem com as principais teclas utilizadas.
Para utilizar o recurso de atalhos, utilize a biblioteca protheus.ch ou a vkey.ch. E quando for utilizar, apenas tome cuidado, pois alguns atalhos (como F1, F3, F12, Shift+F6, Ctrl+F e até alguns atalhos em telas específicas como F4), se você setar outro conteúdo, irá sobrepor a chamada de execução, além do que, existem algumas constantes que podem representar mais de uma chave (por exemplo, Control+I também representa Tab).
Vale ressaltar que uma vez criado o atalho, ele estará disponível em qualquer lugar da sessão / janela atual, então se for utilizado através de ponto de entrada ou em sub rotinas, sempre limpe a chave utilizada (exemplos abaixo de como adicionar chave de atalho e como limpar).
Para adicionar um atalho qualquer, basta utilizar o comando SetKey e passar uma instrução que ele execute (como alertas, funções de usuário ou estáticas). Exemplo:
//Setando Atalhos SetKey( VK_F6, {|| oDlgPvt:End() } ) SetKey( VK_F8, {|| u_zFuncao() } ) SetKey( VK_F9, {|| Alert('Teste') } )
E para limpar a utilização do atalho, basta utilizar Nil. Exemplo:
//Limpando Atalhos SetKey( VK_F6, Nil ) SetKey( VK_F8, Nil ) SetKey( VK_F9, Nil )
Abaixo a listagem de atalhos.
Function Keys
Constante | Atalho no Teclado |
VK_F1 | F1 |
VK_F2 | F2 |
VK_F3 | F3 |
VK_F4 | F4 |
VK_F5 | F5 |
VK_F6 | F6 |
VK_F7 | F7 |
VK_F8 | F8 |
VK_F9 | F9 |
VK_F10 | F10 |
VK_F11 | F11 |
VK_F12 | F12 |
Control Keys
Constante | Atalho no Teclado |
K_CTRL_A | Ctrl-A, Home |
K_CTRL_B | Ctrl-B, Ctrl-Right arrow |
K_CTRL_C | Ctrl-C, PgDn, Ctrl-ScrollLock |
K_CTRL_D | Ctrl-D, Right arrow |
K_CTRL_E | Ctrl-E, Up arrow |
K_CTRL_F | Ctrl-F, End |
K_CTRL_G | Ctrl-G, Del |
K_CTRL_H | Ctrl-H, Backspace |
K_CTRL_I | Ctrl-I, Tab |
K_CTRL_J | Ctrl-J |
K_CTRL_K | Ctrl-K |
K_CTRL_L | Ctrl-L |
K_CTRL_M | Ctrl-M, Return |
K_CTRL_N | Ctrl-N |
K_CTRL_O | Ctrl-O |
K_CTRL_P | Ctrl-P |
K_CTRL_Q | Ctrl-Q |
K_CTRL_R | Ctrl-R, PgUp |
K_CTRL_S | Ctrl-S, Left arrow |
K_CTRL_T | Ctrl-T |
K_CTRL_U | Ctrl-U |
K_CTRL_V | Ctrl-V, Ins |
K_CTRL_W | Ctrl-W, Ctrl-End |
K_CTRL_X | Ctrl-X, Down arrow |
K_CTRL_Y | Ctrl-Y |
K_CTRL_Z | Ctrl-Z, Ctrl-Left arrow |
K_CTRL_1 | Ctrl-1 |
K_CTRL_2 | Ctrl-2 |
K_CTRL_3 | Ctrl-3 |
K_CTRL_4 | Ctrl-4 |
K_CTRL_5 | Ctrl-5 |
K_CTRL_6 | Ctrl-6 |
K_CTRL_7 | Ctrl-7 |
K_CTRL_8 | Ctrl-8 |
K_CTRL_9 | Ctrl-9 |
K_CTRL_0 | Ctrl-0 |
K_CTRL_UNDERSCORE | Ctrl-UNDERSCORE |
K_CTRL_EQUAL | Ctrl-EQUAL |
K_CTRL_KEYPAD_1 | Ctrl-Keypad_0 |
K_CTRL_KEYPAD_2 | Ctrl-Keypad_1 |
K_CTRL_KEYPAD_3 | Ctrl-Keypad_2 |
K_CTRL_KEYPAD_4 | Ctrl-Keypad_3 |
K_CTRL_KEYPAD_5 | Ctrl-Keypad_4 |
K_CTRL_KEYPAD_6 | Ctrl-Keypad_5 |
K_CTRL_KEYPAD_7 | Ctrl-Keypad_7 |
K_CTRL_KEYPAD_8 | Ctrl-Keypad_8 |
K_CTRL_KEYPAD_9 | Ctrl-Keypad_9 |
K_CTRL_KEYPAD_0 | Ctrl-Keypad_0 |
K_CTRL_LEFT | Ctrl-LEFT |
K_CTRL_UP | Ctrl-UP |
K_CTRL_RIGHT | Ctrl-RIGHT |
K_CTRL_DOWN | Ctrl-DOWN |
K_CTRL_KEYPAD_LEFT | Ctrl-Keypad_LEFT |
K_CTRL_KEYPAD_UP | Ctrl-Keypad_UP |
K_CTRL_KEYPAD_RIGHT | Ctrl-Keypad_RIGHT |
K_CTRL_KEYPAD_DOWN | Ctrl-Keypad_DOWN |
Alt Keys
Constante | Atalho no Teclado |
K_ALT_A | Alt-A |
K_ALT_B | Alt-B |
K_ALT_C | Alt-C |
K_ALT_D | Alt-D |
K_ALT_E | Alt-E |
K_ALT_F | Alt-F |
K_ALT_G | Alt-G |
K_ALT_H | Alt-H |
K_ALT_I | Alt-I |
K_ALT_J | Alt-J |
K_ALT_K | Alt-K |
K_ALT_L | Alt-L |
K_ALT_M | Alt-M |
K_ALT_N | Alt-N |
K_ALT_O | Alt-O |
K_ALT_P | Alt-P |
K_ALT_Q | Alt-Q |
K_ALT_R | Alt-R |
K_ALT_S | Alt-S |
K_ALT_T | Alt-T |
K_ALT_U | Alt-U |
K_ALT_V | Alt-V |
K_ALT_W | Alt-W |
K_ALT_X | Alt-X |
K_ALT_Y | Alt-Y |
K_ALT_Z | Alt-Z |
Control Function Keys
Constante | Atalho no Teclado |
K_CTRL_F1 | Ctrl-F1 |
K_CTRL_F2 | Ctrl-F2 |
K_CTRL_F3 | Ctrl-F3 |
K_CTRL_F4 | Ctrl-F4 |
K_CTRL_F5 | Ctrl-F5 |
K_CTRL_F6 | Ctrl-F6 |
K_CTRL_F7 | Ctrl-F7 |
K_CTRL_F8 | Ctrl-F8 |
K_CTRL_F9 | Ctrl-F9 |
K_CTRL_F10 | Ctrl-F10 |
K_CTRL_F11 | Ctrl-F11 |
K_CTRL_F12 | Ctrl-F12 |
Alt Function Keys
Constante | Atalho no Teclado |
K_ALT_F1 | Alt-F1 |
K_ALT_F2 | Alt-F2 |
K_ALT_F3 | Alt-F3 |
K_ALT_F4 | Alt-F4 |
K_ALT_F5 | Alt-F5 |
K_ALT_F6 | Alt-F6 |
K_ALT_F7 | Alt-F7 |
K_ALT_F8 | Alt-F8 |
K_ALT_F9 | Alt-F9 |
K_ALT_F10 | Alt-F10 |
K_ALT_F11 | Alt-F11 |
K_ALT_F12 | Alt-F12 |
Shift Function Keys
Constante | Atalho no Teclado |
K_SH_F1 | Shift-F1 |
K_SH_F2 | Shift-F2 |
K_SH_F3 | Shift-F3 |
K_SH_F4 | Shift-F4 |
K_SH_F5 | Shift-F5 |
K_SH_F6 | Shift-F6 |
K_SH_F7 | Shift-F7 |
K_SH_F8 | Shift-F8 |
K_SH_F9 | Shift-F9 |
K_SH_F10 | Shift-F10 |
K_SH_F11 | Shift-F11 |
K_SH_F12 | Shift-F12 |
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Daniel,
É show de bola.
Porém notei que essa tecla de atalho só funciona se eu estiver em algum campo, ai o protheus dispara.
Por exemplo, montei uma tela customizada a partir do AxAltera a tecla só dispara se eu estiver em algum campo.
SetKey( K_ALT_F6, {|| msgAlert( ‘ALT+F6’ ) } )// Insere um SetKey
nOpcA := AxAltera(“Z03”, nReg, nOpc, aCmpVisu,aCmpEdit, /*nColMens*/,/*cMensagem*/,/*TudOk()*/,/*cTransact*/,/*cFunc*/,aButtons, aParam ,/*aRotAuto*/,.T.)
SetKey(K_ALT_F6, nil)// Apaga um SetKey
Será que conhece um jeito de disparar a tecla sem estar em um campo?
Boa noite Ricardo, tudo bem?
Você quer disparar quando o seu atalho?
Da forma que você desenvolveu, sempre será disparado dentro do AxAltera, ai talvez por isso a impressão de sempre disparar se estiver em algum campo.
O que você pode tentar, é fazer um teste, e utilizar o SetKey antes de utilizar a mBrowse, e utilizar o atalho para ver se dá certo.
Qualquer dúvida, fico à disposição.
Um grande abraço.
Olá, e para a tecla ESC, qual seria a função? Preciso validar se a tecla ESC foi pressionada para chamar uma mensagem perguntando se o usuario quer realmente fechar a tela ou nao..
Obrigado
Boa noite Xará, tudo bem?
Então, desconheço alguma constante que seja para definir a tecla Esc.
O que você poderia fazer, é desabilitá-la, para isso verifique esse link: http://www.blacktdn.com.br/2013/10/fwd-tecla-esc-kvescape-em-advpl.html
Um grande abraço.