Eventos de teclado, juntamente com eventos do mouse, são os principais elementos da interação de um usuário com seu programa.
Abaixo estão informações sobre três eventos que permitem capturar as teclas de um usuário em um aplicativo Delphi: OnKeyDown, OnKeyUp e OnKeyPress.
Para baixo, para cima, pressione, para baixo, para cima, pressione...
As aplicações Delphi podem usar dois métodos para receber a entrada do teclado. Se um usuário precisar digitar algo em um aplicativo, a maneira mais fácil de receber essa entrada é usar um dos controles que respondem automaticamente a pressionamentos de tecla, como Editar.
Em outros momentos, e para propósitos mais gerais, no entanto, podemos criar procedimentos em um formulário que manipule três eventos reconhecidos por formulários e por qualquer componente que aceite entrada do teclado. Podemos escrever manipuladores de eventos para esses eventos para responder a qualquer tecla ou combinação de teclas que o usuário possa pressionar em tempo de execução.
Aqui estão esses eventos:
OnKeyDown - chamado quando qualquer tecla do teclado é pressionada
OnKeyUp - chamado quando qualquer tecla do teclado é liberada
OnKeyPress - chamado quando uma tecla correspondente a um caractere ASCII é pressionada
Manipuladores de teclado
Todos os eventos do teclado têm um parâmetro em comum. o Chave parâmetro é a tecla do teclado e é usada para passar por referência do valor da tecla pressionada. o Mudança parâmetro (no OnKeyDown e OnKeyUp procedimentos) indica se as teclas Shift, Alt ou Ctrl são combinadas com o pressionamento de tecla.
o Parâmetro remetente referencia o controle que foi usado para chamar o método
procedimento TForm1.FormKeyDown (Remetente: TObject; var Chave: Palavra; Shift: TShiftState);... procedimento TForm1.FormKeyUp (Remetente: TObject; var Chave: Palavra; Shift: TShiftState);... procedimento TForm1.FormKeyPress (Remetente: TObject; var Chave: Char);
Responder quando o usuário pressiona teclas de atalho ou acelerador, como as fornecidas com os comandos de menu, não requer gravação de manipuladores de eventos.
O que é o foco?
O foco é a capacidade de receber informações do usuário através do rato ou teclado. Somente o objeto que tem o foco pode receber um evento de teclado. Além disso, apenas um componente por formulário pode estar ativo ou ter o foco em um aplicativo em execução a qualquer momento.
Alguns componentes, como TImage, TPaintBox, TPanel e TLabel não pode receber foco. Em geral, componentes derivados de TGraphicControl são incapazes de receber o foco. Além disso, componentes invisíveis no tempo de execução (TTimer) não pode receber o foco.
OnKeyDown, OnKeyUp
o OnKeyDown e OnKeyUp eventos fornecem o nível mais baixo de resposta do teclado. Ambos OnKeyDown e OnKeyUp os manipuladores podem responder a todas as teclas do teclado, incluindo teclas de função e teclas combinadas com o Mudança, Alte Ctrl chaves.
Os eventos do teclado não são mutuamente exclusivos. Quando o usuário pressiona uma tecla, os dois OnKeyDown e OnKeyPress eventos são gerados e, quando o usuário libera a chave, o OnKeyUp evento é gerado. Quando o usuário pressiona uma das teclas que OnKeyPress não detecta, apenas o OnKeyDown ocorre o evento, seguido pelo OnKeyUp evento.
Se você pressionar uma tecla, o OnKeyUp evento ocorre depois de todo o OnKeyDown e OnKeyPress eventos ocorreram.
OnKeyPress
OnKeyPress retorna um caractere ASCII diferente para 'g' e 'G', mas OnKeyDown e OnKeyUp não faça distinção entre teclas alfa maiúsculas e minúsculas.
Parâmetros de tecla e deslocamento
Desde o Chave parâmetro é passado por referência, o manipulador de eventos pode mudar Chave para que o aplicativo veja uma chave diferente como envolvida no evento. Essa é uma maneira de limitar os tipos de caracteres que o usuário pode inserir, como impedir que eles digitem teclas alfa.
E se Chave dentro ['a'.. 'z'] + ['A'.. 'Z'] então Chave: = # 0
A declaração acima verifica se o Chave O parâmetro está na união de dois conjuntos: caracteres minúsculos (ou seja, uma através z) e caracteres maiúsculos (A-Z). Nesse caso, a instrução atribui o valor do caractere zero a Chave para impedir qualquer entrada no Editar componente, por exemplo, quando recebe a chave modificada.
Para chaves não alfanuméricas, o WinAPI códigos de chave virtual pode ser usado para determinar a tecla pressionada. O Windows define constantes especiais para cada tecla que o usuário pode pressionar. Por exemplo, VK_RIGHT é o código da chave virtual da tecla Seta para a direita.
Para obter o estado da chave de algumas chaves especiais, como ABA ou Subir página, podemos usar o GetKeyState Chamada de API do Windows. O status da tecla especifica se a tecla está para cima, para baixo ou alternada (ativada ou desativada - alternando cada vez que a tecla é pressionada).
E se HiWord (GetKeyState (vk_PageUp)) <> 0 então
ShowMessage ('PageUp - DOWN')
outro
ShowMessage ('PageUp - UP');
No OnKeyDown e OnKeyUp eventos, Chave é um valor não assinado do Word que representa uma chave virtual do Windows. Para obter o valor do caractere de Chave,nós usamos o Chr função. No OnKeyPress evento, Chave é um Caracteres valor que representa um caractere ASCII.
Ambos OnKeyDown e OnKeyUp eventos usam o parâmetro Shift, do tipo TShiftState, um conjunto de sinalizadores para determinar o estado das teclas Alt, Ctrl e Shift quando uma tecla é pressionada.
Por exemplo, quando você pressiona Ctrl + A, os seguintes eventos de chave são gerados:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
Redirecionando eventos de teclado para o formulário
Para interceptar pressionamentos de teclas no nível do formulário, em vez de passá-los para os componentes do formulário, defina as teclas KeyPreview propriedade para True (usando o Inspetor de Objetos). O componente ainda vê o evento, mas o formulário tem a oportunidade de manipulá-lo primeiro - permitir ou não permitir que algumas teclas sejam pressionadas, por exemplo.
Suponha que você tenha vários componentes de edição em um formulário e o Formato. OnKeyPress procedimento se parece com:
procedimentoTForm1.FormKeyPress (Remetente: TObject; var Chave: Char); inícioE se Chave dentro ['0'..'9'] então Chave: = # 0. fim;
Se um dos componentes de edição tiver o Foco, e a KeyPreview propriedade de um formulário for False, esse código não será executado. Em outras palavras, se o usuário pressionar o botão 5 chave, o 5 O caractere aparecerá no componente de edição focado.
No entanto, se o KeyPreview é definido como True, o formulário é OnKeyPress O evento é executado antes que o componente Editar veja a tecla pressionada. Novamente, se o usuário pressionar o botão 5 chave, em seguida, atribui o valor de caractere zero a Chave para impedir a entrada numérica no componente Editar.