Super Difícel.. OnKeyDown não funciona
10/12/2003
0
Quando eu pressiono uma tecla no meu form preciso que ele faça um procedimento, bem simples!
A propriedade KeyPreview do form esta habilitada como true.
Quando pressiono determinadas teclas (o ´F2´ por ex.) o programa nem chega a entrar
no evento OnkeyDown do formulário.
procedure Tform1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if key = 113 then
begin
edit.text := ´Deu certo!´;
end;
end;
usando ´key = 113´ ou ´key = VK_F2´ não dá certo..
Qualquer ajuda é muito bem vinda....
Atenciosamente
Lucas!
Lucas Silva
Posts
10/12/2003
Andre_ipb
se neste form tiver componentes como botões, panels e outros que possuirem a propriedade tabstop isto acontece, o que eu faço no evento destes components colocar o mesmo evento onkeydown do form.
Vc descobri outra forma no delphi 7 replica no forum, seria enteressante que o form tratasse.
André.
10/12/2003
Lucas Silva
para funcionar corretamente propriedade tabStop tem que ficar False ???
10/12/2003
Lucas Silva
10/12/2003
Marconi
O evento Keydown só funciona no objeto que estiver com o ´foco´, senão se fizessemos um caixa edit que somente recebesse letras e outra que somente recebesse números, como iriamos programar o evento keydown.
Direcione para o evento keydown do form todos os eventos keydown dos objetos que podem receber ´foco´ ou ´tab stop´.
Deve funcionar
Marconi
10/12/2003
Marconi
Em todos os objetos que quando estiverem com o ´foco´ possam receber o evento keydown, vá até o envento keydown e clique na seta a direita e escolha o envento que voce já programou no form.
Marconi
11/12/2003
Lucas Silva
Quando eu coloco o Evento OnKeyDown no Form não era pra ele funcionar, quando eu pressionar qualquer tecla com o form ativo???
Lucas!
11/12/2003
Maicongabriel
procedure Tform1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if key = 113 then begin edit.text := ´Deu certo!´; end; end;
Notei que você tem [b:fa6b811b78]inherited[/b:fa6b811b78] ali, este seu form é derivado de algum outro form padrão, por exemplo ?
Note que antes de executar o seu codigo, ele executa tudo o que vem do [b:fa6b811b78]inherited[/b:fa6b811b78] e este pode estar simplesmente cancelando a sua função!
Tente remover ou mover a instrução [b:fa6b811b78]inherited[/b:fa6b811b78] para o final da sua procedure!
11/12/2003
Lucas Silva
** o fato de ter o [b:69db0e9169]inherited[/b:69db0e9169] não está cancelando o evento OnKeyDown.
É uma coisa super estranha que está acontecendo...
No meu form tem um edit, no evento OnkeyDown dele eu coloco
if key = 113 then
edit1.text := ´Deu certo´;
quando pressiono o F2, o programa nem chega a chamar a procedure OnkeyDown. Qualquer letra que eu pressione ou a tecla F1 ele chama o OnkeyDown tranquilo.
Acredito que deve ser alguma coisa ligada ao form....
o propriedade KeyPreview está True....
Alguem tem alguma sujestão.....
Obrigado,
Lucas!
11/12/2003
Andre_ipb
se entendi correto, tenta usar o seguinte:
if key = VK_F2 then
ShowMessage(´del certo, obaaaaa!!!´);
Se isso não der certo verifica se na sua area de trabalho tem algum atalha que capturando o F2, dentro das proprietadade dos atalhos do windows tem o recurso de capturar teclas (proprietades do atalho, paleta atalhos, edit tecla de atalho) isso faz com que o windows tenha preferencia na captura.
Isso já aconteceu comigo no win98, eu tinha configurado uma tecla de atalho para atalho da area de trabalho e exclui o atalho, para solucionar tive que criar um atalho em outro micro capturando a tecla e jogar na area de trabalho, acessar as propriedade e anular a tecla de atalho, isso tudo por que a tecla de atalho já estava configurada e o windows não permite configurar dois atalhos capturar a mesma tecla.
André
11/12/2003
Lucas Silva
andré,
o erro foi meu cara....
erro bobo, eu coloquei um ShortCut com a tecla ´F2´.
aí é claro que não que naõ ia dar certo....
muito obrigado pelos conselhos ai....
valeu,
LucAs
23/02/2015
Elvis Gomes
begin
case Msg.CharCode of
114: coloque aqui seu Form ; // F3
end;
end;
Clique aqui para fazer login e interagir na Comunidade :)