Como capturar o pressionamento da seta do teclado?
Preciso capturar quando a tecla da seta do teclado for pressionada, mas como no form tem alguns panels que tem que receber o foco, esta função não consegue ser percebida pelo evento do form OnKeyDown. Minha idéia é utilizar algum evento parecido com este mas que abranja toda a aplicação, mas não sei como fazer.
Alguém sabe como fazer ou tem alguma sugestão diferente?
Alguém sabe como fazer ou tem alguma sugestão diferente?
Raserafim
Curtidas 0
Melhor post
Fabio.hc
19/12/2004
Tente assim:
procedure TForm1.TeclaSeta(var Msg: TMsg; var Handled: Boolean); begin If not (Screen.ActiveForm.ClassName = ´TMessageForm´) then begin If Msg.message = WM_KEYDOWN then begin Case Msg.wParam of VK_UP : ShowMessage(´cima´); VK_LEFT : ShowMessage(´esquerda´); VK_DOWN : ShowMessage(´baixo´); VK_RIGHT : ShowMessage(´direita´); end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := TeclaSeta; end;
GOSTEI 1
Mais Respostas
Fabio.hc
19/12/2004
Tente assim:
Coloque True na propriedade KeyPreview do form.
Coloque True na propriedade KeyPreview do form.
GOSTEI 0
Raserafim
19/12/2004
ativando a propriedade KeyPreview consigo capturar todas as teclas, menos as setas do teclado.
GOSTEI 0
Raserafim
19/12/2004
Valeu Fábio, é isso mesmo.
Mas preciso complementar com uma coisa:
As setas do teclado funcionam, por padrão, como a tecla TAB. Preciso interceptar isso, pois em alguns botões quero que as setas assumam outras funções. Portanto preciso que ao pressionar as setas não o foco não seja passado para o próximo componente, e sim execute um determinado procedimento.
Mas preciso complementar com uma coisa:
As setas do teclado funcionam, por padrão, como a tecla TAB. Preciso interceptar isso, pois em alguns botões quero que as setas assumam outras funções. Portanto preciso que ao pressionar as setas não o foco não seja passado para o próximo componente, e sim execute um determinado procedimento.
GOSTEI 0
Fabio.hc
19/12/2004
Tente assim:
... VK_UP: begin façaalgumacoisa; Msg.message:=0; end; ...
GOSTEI 0