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

ConstanteAtalho no Teclado
VK_F1F1
VK_F2F2
VK_F3F3
VK_F4F4
VK_F5F5
VK_F6F6
VK_F7F7
VK_F8F8
VK_F9F9
VK_F10F10
VK_F11F11
VK_F12F12

Control Keys

ConstanteAtalho no Teclado
K_CTRL_ACtrl-A, Home
K_CTRL_BCtrl-B, Ctrl-Right arrow
K_CTRL_CCtrl-C, PgDn, Ctrl-ScrollLock
K_CTRL_DCtrl-D, Right arrow
K_CTRL_ECtrl-E, Up arrow
K_CTRL_FCtrl-F, End
K_CTRL_GCtrl-G, Del
K_CTRL_HCtrl-H, Backspace
K_CTRL_ICtrl-I, Tab
K_CTRL_JCtrl-J
K_CTRL_KCtrl-K
K_CTRL_LCtrl-L
K_CTRL_MCtrl-M, Return
K_CTRL_NCtrl-N
K_CTRL_OCtrl-O
K_CTRL_PCtrl-P
K_CTRL_QCtrl-Q
K_CTRL_RCtrl-R, PgUp
K_CTRL_SCtrl-S, Left arrow
K_CTRL_TCtrl-T
K_CTRL_UCtrl-U
K_CTRL_VCtrl-V, Ins
K_CTRL_WCtrl-W, Ctrl-End
K_CTRL_XCtrl-X, Down arrow
K_CTRL_YCtrl-Y
K_CTRL_ZCtrl-Z, Ctrl-Left arrow
K_CTRL_1Ctrl-1
K_CTRL_2Ctrl-2
K_CTRL_3Ctrl-3
K_CTRL_4Ctrl-4
K_CTRL_5Ctrl-5
K_CTRL_6Ctrl-6
K_CTRL_7Ctrl-7
K_CTRL_8Ctrl-8
K_CTRL_9Ctrl-9
K_CTRL_0Ctrl-0
K_CTRL_UNDERSCORECtrl-UNDERSCORE
K_CTRL_EQUALCtrl-EQUAL
K_CTRL_KEYPAD_1Ctrl-Keypad_0
K_CTRL_KEYPAD_2Ctrl-Keypad_1
K_CTRL_KEYPAD_3Ctrl-Keypad_2
K_CTRL_KEYPAD_4Ctrl-Keypad_3
K_CTRL_KEYPAD_5Ctrl-Keypad_4
K_CTRL_KEYPAD_6Ctrl-Keypad_5
K_CTRL_KEYPAD_7Ctrl-Keypad_7
K_CTRL_KEYPAD_8Ctrl-Keypad_8
K_CTRL_KEYPAD_9Ctrl-Keypad_9
K_CTRL_KEYPAD_0Ctrl-Keypad_0
K_CTRL_LEFTCtrl-LEFT
K_CTRL_UPCtrl-UP
K_CTRL_RIGHTCtrl-RIGHT
K_CTRL_DOWNCtrl-DOWN
K_CTRL_KEYPAD_LEFTCtrl-Keypad_LEFT
K_CTRL_KEYPAD_UPCtrl-Keypad_UP
K_CTRL_KEYPAD_RIGHTCtrl-Keypad_RIGHT
K_CTRL_KEYPAD_DOWNCtrl-Keypad_DOWN

Alt Keys

ConstanteAtalho no Teclado
K_ALT_AAlt-A
K_ALT_BAlt-B
K_ALT_CAlt-C
K_ALT_DAlt-D
K_ALT_EAlt-E
K_ALT_FAlt-F
K_ALT_GAlt-G
K_ALT_HAlt-H
K_ALT_IAlt-I
K_ALT_JAlt-J
K_ALT_KAlt-K
K_ALT_LAlt-L
K_ALT_MAlt-M
K_ALT_NAlt-N
K_ALT_OAlt-O
K_ALT_PAlt-P
K_ALT_QAlt-Q
K_ALT_RAlt-R
K_ALT_SAlt-S
K_ALT_TAlt-T
K_ALT_UAlt-U
K_ALT_VAlt-V
K_ALT_WAlt-W
K_ALT_XAlt-X
K_ALT_YAlt-Y
K_ALT_ZAlt-Z

Control Function Keys

ConstanteAtalho no Teclado
K_CTRL_F1Ctrl-F1
K_CTRL_F2Ctrl-F2
K_CTRL_F3Ctrl-F3
K_CTRL_F4Ctrl-F4
K_CTRL_F5Ctrl-F5
K_CTRL_F6Ctrl-F6
K_CTRL_F7Ctrl-F7
K_CTRL_F8Ctrl-F8
K_CTRL_F9Ctrl-F9
K_CTRL_F10Ctrl-F10
K_CTRL_F11Ctrl-F11
K_CTRL_F12Ctrl-F12

Alt Function Keys

ConstanteAtalho no Teclado
K_ALT_F1Alt-F1
K_ALT_F2Alt-F2
K_ALT_F3Alt-F3
K_ALT_F4Alt-F4
K_ALT_F5Alt-F5
K_ALT_F6Alt-F6
K_ALT_F7Alt-F7
K_ALT_F8Alt-F8
K_ALT_F9Alt-F9
K_ALT_F10Alt-F10
K_ALT_F11Alt-F11
K_ALT_F12Alt-F12

Shift Function Keys

ConstanteAtalho no Teclado
K_SH_F1Shift-F1
K_SH_F2Shift-F2
K_SH_F3Shift-F3
K_SH_F4Shift-F4
K_SH_F5Shift-F5
K_SH_F6Shift-F6
K_SH_F7Shift-F7
K_SH_F8Shift-F8
K_SH_F9Shift-F9
K_SH_F10Shift-F10
K_SH_F11Shift-F11
K_SH_F12Shift-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 para Ricardo Batista MendesCancelar resposta

Terminal de Informação