Como detectar as teclas pressionadas para impulsionar uma determinada ação
Imagine, por exemplo, que você desejaria que, na tela abaixo, ao pressionarmos ENTER sobre o componente TEdit, a pesquisa do botão Procurar já começasse.
Para isso, bastaria um código semelhante a este:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_RETURN then Button1Click(self); end; |
Aqui, estamos supondo, claro, que o botão Button1 já foi codificado para pesquisar ao ser clicado. Note também que o próprio método OnKeyDown( ) já recebe, como parâmetros, as variáveis Key e Shift; a primeira guarda um valor numérico que indica qual foi a tecla pressionada, e a segunda armazena teclas que podem ser pressionadas simultaneamente com a primeira (ou botões do mouse). No caso de ALT+F4 (para fechar uma janela, por exemplo), a variável Shift armazenaria o ALT e Key ficaria com VK_F4. Supondo que estejamos numa janela em que você queira impedir o comando ALT+F4 de ser usado, há uma maneira simples de bloqueá-lo. É o que mostramos no exemplo a seguir:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssAlt in Shift) AND ( Key = VK_F4) then Key:= 0 ; end; |
Detectando a utilização das teclas desejadas e alterando-se o valor de uma delas para zero, a janela já não mais receberá ALT+F4 mas, sim, ALT e zero (na linha onde se lê Key := 0). Para que o código acima seja detectado apenas pela janela da sua aplicação, basta usar o evento OnKeyDown do formulário (e não de outro componente). Além disso, a propriedade KeyPreview do form deve ser marcada como True (do contrário, as mensagens de teclas que passarem pelo form não serão interpretadas).
Abaixo,uma tabela mostrando os valores mais usados e sua correspondência em ASCII e em hexadecimal:
Código virtual |
Hexadecimal | Tecla ou botão (de mouse) |
---|---|---|
VK_LBUTTON | 01 | Botão esquerdo do mouse |
VK_RBUTTON | 02 | Botão direito do mouse |
VK_CANCEL | 03 | CTRL+Break (ou CTRL+Pause ou CTRL+C) |
VK_MBUTTON | 04 | Botão do meio do mouse |
VK_BACK | 08 | Backspace |
VK_TAB | 09 | TAB |
VK_RETURN | 0D | ENTER |
VK_SHIFT | 10 | Shift |
VK_CONTROL | 11 | CTRL |
VK_MENU | 12 | ALT |
VK_CAPITAL | 14 | Caps Lock |
VK_ESCAPE | 1B | ESC |
VK_SPACE | 20 | Barra de espaços |
VK_PRIOR | 21 | Tecla Page Up |
VK_NEXT | 22 | Tecla Page Down |
VK_END | 23 | End |
VK_HOME | 24 | Home |
VK_LEFT | 25 | Seta para a esquerda |
VK_UP | 26 | Seta para cima |
VK_RIGHT | 27 | Seta para a direita |
VK_DOWN | 28 | Seta para baixo |
VK_SNAPSHOT | 2C | Print Screen |
VK_INSERT | 2D | INS (Insert) |
VK_DELETE | 2E | DEL |
VK_NUMPAD1 | 61 | 1 do teclado numérico |
VK_NUMPAD2 | 62 | 2 do teclado numérico |
VK_NUMPAD3 | 63 | 3 do teclado numérico |
VK_SUBTRACT | 6D | Hífen ou sinal de subtração |
VK_DIVIDE | 6F | Sinal de divisão (/) |
VK_F1 | 70 | Tecla F1 |
VK_F2 | 71 | Tecla F2 |
VK_F3 | 72 | Tecla F3 |
VK_F4 | 73 | Tecla F4 |
VK_F5 | 74 | Tecla F5 |
VK_NUMLOCK | 90 | Tecla Num Lock |
VK_SCROLL | 91 | Tecla Scroll Lock |
VK_LSHIFT | A0 | Shift da esquerda |
VK_RSHIFT | A1 | Shift da direita |
VK_LCONTROL | A2 | CTRL da esquerda |
VK_RCONTROL | A3 | CTRL da direita |
Fonte: ASMC, delphi.about.com
0 comentários:
Postar um comentário