bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Como interceptar teclas e combinações de teclas

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é 2x no Cartão de Crédito. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

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.

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

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.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'-------------------------------
'SHIFT = 1 | CTRL = 2 | ALT = 4
'-------------------------------
Select Case Val((Shift*100) & KeyCode)
   '------------------------------------------------------------------------
   'Intercepta CTRL+(+); CTRL+(-); ALT+F4; CTRL+F4; CTRL+W; PageDown e PageUp
   '------------------------------------------------------------------------
   Case 200187,200189,200107,200109,400115,200115,20087,33,34,20033,20034
      KeyCode = 0 'Neutraliza a tecla apertada
   Case 10087 'SHIFT(1) + W(87)
      '------------------------------------------------
      'Abre o navegador carregando o site UsandoAccess
      '------------------------------------------------
      Application.FollowHyperlink "http:\\www.usandoaccess.com.br"
End Select
End Sub

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:

Usando Access - Visualizar teclas

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. 

Private Sub txMemo_KeyDown(KeyCode As Integer, Shift As Integer)
'-------------------------------
'SHIFT = 1 | CTRL = 2 | ALT = 4
'-------------------------------
Select Case Val((Shift*100) & KeyCode)
   '-------------------------------------------------------
   'Intercepta CTRL+C; CTRL+X; CTRL+INSERT e SHIFT+DELETE
   '-------------------------------------------------------
   Case 20067, 20088, 20045, 10067, 10046
      KeyCode = 0
End Select
End Sub

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:

Private Sub txNumero_KeyPress(KeyAscii As Integer)
'Os códigos 48(0) a 57(9) representam os números pressionados
'O código 8 representa a tecla de retroceder
'keyAscii = 0 neutraliza a tecla pressionada
If Not Eval(KeyAscii & " between 48 and 57") And Not KeyAscii = 8 Then KeyAscii = 0
End Sub

2. Passa automaticamente a letra pressionada para maiúscula

Private Sub txtMaiusculas_KeyPress(KeyAscii As Integer)
'A função Chr() retorna a letra correspondente ao número keyAscii
'A função UCase() passa a letra para maiúscula
'A função Asc() retorna o número correspondente da letra 
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

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:Usando Access - Interceptar teclas

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:

Usando Access - Macro Autokeys


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:

Usando Access - Teclas especiais do Access

Arquivo exemplo

Faça o download abaixo:

Bom estudo!


 

 


12 comentário(s)

Rogério Rodrigues   06/03/2024 06:01:05

muito obrigado, pelas dicas

eduardo Lima   14/07/2018 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/2015 17:48:57

Tem como eu limitar a macro autokeys a certos formulários?

Avelino Sampaio   15/07/2015 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/2015 14:45:25

Como faço para interceptar a tecla Esc ?

Avelino Sampaio   20/05/2014 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/2014 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/2014 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/2014 15:18:02

Esta é mais uma dica maravilhosa... Assim como todas as outras!
Parabéns pelo seu trabalho...

João Ricardo   27/03/2014 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/2014 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/2014 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 .....


Envie seu comentário: