Super Difícel.. OnKeyDown não funciona

10/12/2003

20

Bom pessoal,
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!


Responder

Posts

10/12/2003

Andre_ipb

Lucas,
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é.


Responder

10/12/2003

Lucas Silva

andré,
para funcionar corretamente propriedade tabStop tem que ficar False ???


Responder

10/12/2003

Lucas Silva

não entendi muito bem não, se vc puder explicar melhor, ficarei muito grato...


Responder

10/12/2003

Marconi

É exatamente o que Andre escreveu acima.

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


Responder

10/12/2003

Marconi

explicando melhor

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


Responder

10/12/2003

Andre_ipb

Obrigado Marconi, é isto aí lucas...

André


Responder

11/12/2003

Lucas Silva

Bom pessoal, pra mim fica totalmente inviável colocar o evento OnKeyDown em todos os componentes do Form.

Quando eu coloco o Evento OnKeyDown no Form não era pra ele funcionar, quando eu pressionar qualquer tecla com o form ativo???


Lucas!


Responder

11/12/2003

Maicongabriel

Ola Lucas

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!


Responder

11/12/2003

Lucas Silva

Ola Lucas Notei que você tem [b:69db0e9169]inherited[/b:69db0e9169] 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:69db0e9169]inherited[/b:69db0e9169] e este pode estar simplesmente cancelando a sua função! Tente remover ou mover a instrução [b:69db0e9169]inherited[/b:69db0e9169] para o final da sua procedure!



** 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!


Responder

11/12/2003

Andre_ipb

Lucas, deixa ver se eu entendi, o seu problema não a função onkeydown e sim capturar a tecla F2?

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é


Responder

11/12/2003

Lucas Silva

Lucas, deixa ver se eu entendi, o seu problema não a função onkeydown e sim capturar a tecla F2? 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é





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


Responder

23/02/2015

Elvis Gomes

procedure TFrml.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
case Msg.CharCode of
114: coloque aqui seu Form ; // F3
end;
end;
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira