domingo, 22 de maio de 2016

Usando Virtual-Key Codes


Como detectar as teclas pressionadas para impulsionar uma determinada ação
O Windows define constantes especiais para cada tecla que você pressiona no teclado. A estas constantes damos o nome de Virtual-Key Codes; virtual aqui é porque não são valores reais, mas valores com os quais teremos maior facilidade para trabalhar (afinal, os valores reais estão em binário, consistindo numa sequência de 0s e 1s e trabalhar diretamente com eles seria caótico). Esses códigos virtuais identificam várias teclas e podem ser usados quando manipulamos os eventos OnKeyUp or OnKeyDown de diversos componentes (inclusive do próprio Form). Os códigos virtuais não indicam apenas tecla, mas também os botões do mouse. Todas as constantes estão definidas na unit Windows do Delphi.
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
Share:

0 comentários:

Postar um comentário

Tecnologia do Blogger.