Utilizando teclas de atalho no AdvPL

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

4 Responses

  1. Ricardo Batista Mendes disse:

    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?

    • Dan_Atilio disse:

      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.

  2. Daniel R. Ferreira disse:

    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

Deixe uma resposta

Terminal de Informação