Informações pessoais Informações Pessoais
Ciência e Tecnologia Ciência e Tecnologia
Embarcadero Delphi Delphi
Para Sua Área Profissional Área Profissional

 

Delphi Delphi

Pgina sobre a Linguagem
de programao da Embarcadero

Usando Virtual-Key Codes

Como detectar as teclas pressionadas para impulsionar uma determinada ao

27-03-2015

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 no so valores reais, mas valores com os quais teremos maior facilidade para trabalhar (afinal, os valores reais esto em binrio, consistindo numa sequncia de 0s e 1s e trabalhar diretamente com eles seria catico). Esses cdigos virtuais identificam vrias teclas e podem ser usados quando manipulamos os eventos OnKeyUp or OnKeyDown de diversos componentes (inclusive do prprio Form). Os cdigos virtuais no indicam apenas tecla, mas tambm os botes do mouse. Todas as constantes esto 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 boto Procurar j comeasse.

Para isso, bastaria um cdigo 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 boto Button1 j foi codificado para pesquisar ao ser clicado. Note tambm que o prprio mtodo OnKeyDown( ) j recebe, como parmetros, as variveis Key e Shift; a primeira guarda um valor numrico que indica qual foi a tecla pressionada, e a segunda armazena teclas que podem ser pressionadas simultaneamente com a primeira (ou botes do mouse). No caso de ALT+F4 (para fechar uma janela, por exemplo), a varivel 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 utilizao das teclas desejadas e alterando-se o valor de uma delas para zero, a janela j no mais receber ALT+F4 mas, sim, ALT e zero (na linha onde se l Key := 0). Para que o cdigo acima seja detectado apenas pela janela da sua aplicao, basta usar o evento OnKeyDown do formulrio (e no de outro componente). Alm disso, a propriedade KeyPreview do form deve ser marcada como True (do contrrio, as mensagens de teclas que passarem pelo form no sero interpretadas).

Abaixo,uma tabela mostrando os valores mais usados e sua correspondncia em ASCII e em hexadecimal:

Cdigo virtual
Hexadecimal Tecla ou boto (de mouse)
VK_LBUTTON 01 Boto esquerdo do mouse
VK_RBUTTON 02 Boto direito do mouse
VK_CANCEL 03 CTRL+Break (ou CTRL+Pause ou CTRL+C)
VK_MBUTTON 04 Boto 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 espaos
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 numrico
VK_NUMPAD2 62 2 do teclado numrico
VK_NUMPAD3 63 3 do teclado numrico
VK_SUBTRACT 6D Hfen ou sinal de subtrao
VK_DIVIDE 6F Sinal de diviso (/)
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


Usando a classe TDictionary - 26-03-2015

Sua Primeira Aplicao FireMonkey - 22-03-2015

Efeitos de imagem no Delphi - 22-03-2015

Timer: criando um cronmetro - 10-09-2013

Criando um Tocador de udio com Playlist - 03-09-2013

Criando um Navegador Web com TWebBrowser - 03-09-2013

Personalizando o DBNavigator - 01-09-2013

Como Esmaecer um Formulrio - 24-09-2010

Procure um assunto especfico:  

 

  - Todos os artigos -