Como interceptar teclas e combinações de teclas
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Os formulários e seus objetos possuem eventos para a interceptação de teclas, que são:
Ao apertar tecla
Ao liberar tecla
Ao pressionar tecla
Evento "Ao apertar tecla"
É usado para interceptar combinações de
teclas, como por exemplo :
ALT+F4; CTRL+C; SHIFT+DELETE; ...
Observe no procedimento abaixo que o referido evento possui os argumentos keyCode e Shift
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) End Sub
Através do argumento SHift é possível saber se uma das seguintes teclas foi
apertada: CTRL, SHIFT ou ALT. Para cada tecla apertada, o
argumento retorna um número correspondente:
Tecla
SHIFT retorna o número 1
Tecla
CTRL retorna o número 2
Tecla
ALT retorna o número 4
O argumento KeyCode retorna o número correspondente da tecla que foi apertada.
Para saber qual número corresponde à tecla apertada, utilize a função Msgbox() no evento.
Vamos supor que seja apertada a combinação CTRL+F4, os argumentos do evento retornam os seguintes valores:
Argumento Shift = 2 (tecla CTRL)
Argumento keyCode = 115 (tecla F4)
Veja abaixo um exemplo de código que bloqueia as seguintes combinações de teclas:
CTRL+(+); CTRL+(-); ALT+F4; CTRL+F4; CTRL+W; PageDown e PageUp.
O código também dispara a abertura do site UsandoAccess, com a combinação das teclas SHIFT+W.
Observe que para neutralizar a tecla apertada, basta alterar o argumento keyCode para zero.
O código acima está sendo utilizado no evento do formulário e isto significa que em qualquer parte do formulário as combinações de teclas serão detectadas.
Habilitando os eventos do formulário
Os eventos "Ao apertar tecla" e "Ao pressionar tecla" dos formulários, por padrão, ficam desabilitados. Para habilitá-los é necessário alterar a propriedade "Visualizar teclas" para SIM. Veja na imagem:
Já os eventos dos controles estão habilitados, por padrão.
Evento aplicado em um campo
Observe o código utilizado no evento "Ao apertar tecla" de um campo, cujo o objetivo é o de bloquear as seguintes combinações:
CTRL+C; CTRL+X; CTRL+INSERT; SHIFT+DELETE.
Este código impede que o usuário copie o texto do campo ao usar as combinações de teclas.
Evento "Ao pressionar tecla"
Este evento é usado para interceptar teclas individuais. Veja alguns exemplos:
1. Campo que aceita somente caracteres numéricos mais a tecla de retroceder:
2. Passa automaticamente a letra pressionada para maiúscula
O aplicativo oferecido no artigo, tem o formulário frmTeste, aonde você poderá testar os códigos aqui apresentados. Veja o formulário na imagem abaixo e observe os comentários em vermelho e azul:
Macro Autokeys
Com esta macro é possível neutralizar teclas e/ou combinações de teclas em qualquer ambiente do seu aplicativo. Observe na imagem abaixo que a função da tecla F1 (Ajuda do Access) está neutralizada ao ter sido reprogramada para gerar apenas um Bip.
Pode-se também criar uma combinação de teclas para executar uma determinada tarefa. Veja que está sendo utilizada a combinação CTRL+F (^f) para abrir o formulário de nome frmTeste2:
Desabilitando teclas especiais do Access
Através das Opções do Access > Banco de dados atual pode-se desabilitar as teclas especiais do Access que são: F11, AlT+F11 e CTRL+G e para isso, basta desmarcar a opção assinalada. Veja:
Arquivo exemplo
Faça o download abaixo:
Bom estudo!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
12 comentário(s) Rogério Rodrigues 06/03/2024 06:01:05 muito obrigado, pelas dicas eduardo Lima 14/07/2023 17:07:24 Ola! Gostaria de uma ajuda com teclas scroll lock, num lock e caps lock. Meu programa usa o código abaixo para entrar com valores direto em caixas texto pressionando teclas especificas, exp: tecla F2 acrescenta 1 a caixa "moedas de 5 centavos" ( maquina para contar moedas ). eu desmoitei um teclado usb antigo e usei a placa como interface. funciona muito bem. porem gostaria de usar os leds para acionar motor e solenoide da maquina. assim poderia programar para parar em determinado valor. segue o código das teclas que usei: Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF2 Me.teste1 = teste1 + 1 KeyCode = 0 Case vbKeyF3 Me.teste2 = teste2 + 1 KeyCode = 0 Case vbKeyF4 Me.teste3 = teste3 + 1 KeyCode = 0 Case vbKeyF5 Me.teste4 = teste4 + 1 KeyCode = 0 Case Is = vbKeyF6 Me.teste5 = teste5 + 1 KeyCode = 0 Case Is = vbKeyS Me.Seleção53 = Seleção53 + 1 KeyCode = 0 Case Is = vbKeyF9 Me.teste5 = teste5 = 0 Me.teste4 = teste4 = 0 Me.teste3 = teste3 = 0 Me.teste2 = teste2 = 0 Me.teste1 = teste1 = 0 KeyCode = 0 End Select End Sub pensei em algo tipo se o valor da ''caixatexto1" for igual ou maior q o da ''caixatexto2", o led numluck acende. assim teria três formas usar um teclado comum para enviar comandos do programa para maquina física e coletar muitos dados da maquina física para o programa. isso poderia ajudar muito em vários projetos. ps: nao sei programar, o que eu consegui foi lendo e copiando códigos nos blogs e apostilas. um link do youtube mostrando como aproveitar o teclado> https://www.youtube.com/watch?v=srLINRLUS70 grato por qualquer ajuda! abçs! Lucas 17/12/2022 17:48:57 Tem como eu limitar a macro autokeys a certos formulários? Avelino Sampaio 15/07/2022 05:46:36 Matheus, use a caixa de mensagem para saber o código correspondente a tecla pressionada. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'Mostra na tela o código da tecla apertada MsgBox "KeyCode: " & KeyCode & " , Shift: " & Shift End Sub Sucesso! matheus 14/07/2022 14:45:25 Como faço para interceptar a tecla Esc ? Avelino Sampaio 20/05/2021 13:15:34 Wagner, a combinação em quetsão é inerente ao Windows e não ao Access. Copie cole os links indicados abaixo para o seu navegador e assim pesquisar sobre o assunto: http://comunidade.itlab.com.br/eve/forums/a/tpc/f/331603531/m/3071097711?r=3071097711#3071097711 http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=Ctrl+%2B+Alt+%2B+Del Bom estudo! WSenna 20/05/2021 12:31:07 Grande Avelino. Parabéns pela esplêndida aula acima. Só resta uma pergunta a saber: Como inibir a combinação Ctrl + Alt + Del Confesso que já tentei tudo mas não consegui o efeito desejado. Abraços, WSenna MARCIO MELO MARTINS 29/03/2021 02:19:59 Muito didático, agora da para saber os comandos sem precisar de uma tabelinha, antes eu usava o nome... por exemplo Seta para direita vbKeyRight que em número é 39, faz o mesmo efeito. Só uma dúvida. Eu fiz um código que coloquei no evento Form_KeyDown para quando acionar a tecla seta direita abrir o próx. Form Dinâmico... O código só funciona uma única fez, abre o próx. form certinho, que tem o mesmo código... Case 39 Call SequenciaSlideAvanca(Me.Name) Function SequenciaSlideAvanca(strForm As String) 'função esta num módulo 'On Error Resume Next Dim strProxForm, Filtro As String Dim i, idSeq As Integer 'Buscar o registro, comparar a próx. seg. 'pegar a id da seguência, usando o nome do form q esta aberto strForm = (Me.Name) idSeq = DLookup("Sequencia", "tblSeqForm", "FormNome = '" & strForm & "'") 'Loop na sequência de Slide For i = 1 To 20 idSeq = idSeq + 1 strProxForm = DLookup("FormNome", "tblSeqForm", "Sequencia = " & idSeq & " AND TagOcultar = 0") If Len(strProxForm) > 0 Then DoCmd.Close acForm, strForm, acSaveYes 'fecha o frm atual DoCmd.OpenForm strProxForm, acFormPivotChart 'abre próx. form Exit Function End If Next End Function O código só funciona uma fez, o próximo form que abre não interpreta as teclas, mas se eu fechar ele e abrir, passa a funcionar. Já tentei forçar Form_Load() Me.KeyPreview = True, todos estão True em visualizar teclas, quando vi que lançou este artigo retomei essa idéia trocando os comandos em nome por os de números, ficou do mesmo jeito. Há, no seu Exemplo, no segundo Form, onde você pede para usar as Teclas - Control + F para fechar o form pela macro; tem de corrigir a macro, ela esta executando abrir form Forte abraço! Erick Lima 28/03/2021 15:18:02 Esta é mais uma dica maravilhosa... Assim como todas as outras! Parabéns pelo seu trabalho... João Ricardo 27/03/2021 23:07:59 Parabéns Avelino, Tanto pelo conhecimento qto pela iniciativa de ajudar de forma perfeitamente didática. Suas dicas e videoaulas me fazem recordar dos melhores professores que tive. Marcelo David 27/03/2021 18:56:27 Olá Avelino, mais uma vez de parabéns! As macros AutoKeys poderão auxilia na segurança,do,aplicativo, interceptando o pressionamento das teclas de atalho. Será que estou certo? Augusto 27/03/2021 12:10:32 Parabéns Avelino.. Mais uma vez suas dicas e observações serão de grande utilidade na elaboração de qualquer aplicativo ... Ótima dica ..... |