Ir ao conteúdo

Chamar uma procedure com tecla Enter


MHK

Posts recomendados

Postado

Olá pessoal, estou com dificuldades para trabalhar com pressionamento de teclas no form dentro do delphi. Eis o problema: Preciso fazer no meu form com que, ao clicar "enter" ele chame a procedure do button1 (evento onclick). Como faço isso?:eek:

  • Membro VIP
Postado

Olá!

Criei o seguinte:

Coloque um TTimer com interval 1 e Enabled := true;

No OnTimer coloque:

if GETASYNCKEYSTATE(VK_RETURN) <> 0 then
Button1.Click;

Funciona, mas receio que pode ser melhorado..

Vou pesquisar, e deixo para você pesquisar também! ^^

Abraços e qualquer coisa poste!

Postado

:)Perfeito amigo, mas, se possível, poderia explicar o código, pois não entendi o que você fez exatamente e acho legal entender para não ficar só na decoreba de código.:huh:

Abraços!

  • Membro VIP
Postado

Com certeza! :)

O que acontece é que podemos trabalhar com teclas pressionadas nos eventos OnKeyPress e OnKeyDown dos componentes..

Poderiamos ter feito o seguinte código no evento OnKeyPress do form:

if key = #13 then
Button1.Click;

Key = a tecla pressionada, #13 = enter

Entretanto, se temos algum componente (que receba foco, como botão, edit, memo, listbox, etc) o form não fica como "componente selecionado" então se você pressionar algo ele vai pesquisar pelo evento OnKeyPress do botão, ou do edit, por exemplo..

Não podemos colocar o código no evento OnKeyPress do próprio botão pois seria inutil: enter faria ele ser "clicado"..

Então precisamos arrumar um jeito de descobrir o estado das teclas (pressionadas ou não)

Então adicionamos um timer com interval 1 para pegar o tempo todo o estado, e fazemos a checagem:

GETASYNCKEYSTATE(VK_RETURN) <> 0

Função que retorna o estado da tecla que está dentro dos parametros.. existem outras funções como o GetKeyState();

VK_RETURN = Enter.. então basicamente: "PegarEstadoDaTecla(Enter)"

Se for igual a 0, a tecla não está pressionada..

Se for diferente de 0 a tecla está pressionada..

ButtonX.Click; faz o botão executar o código do evento OnClick (simula um clique no botão)

Se sobrou alguma duvida, por favor pergunte! :)

Lembrando que, por esse código, não importa AONDE foi digitado, pois ele verifica o tempo todo o ESTADO DO TECLADO..

Experimente iniciar o programa, minimiza-lo e apetar enter, você verá que o botão será "clicado" da mesma forma.. (Por isso que falei que ele pode ser melhorado)..

Abraços!

Postado

Entretanto, se temos algum componente (que receba foco, como botão, edit, memo, listbox, etc) o form não fica como "componente selecionado" então se você pressionar algo ele vai pesquisar pelo evento OnKeyPress do botão, ou do edit, por exemplo..

Não podemos colocar o código no evento OnKeyPress do próprio botão pois seria inutil: enter faria ele ser "clicado"..

Entendi perfeitamente o que quis dizer, o problema é que essa parte específica me confundiu, apesar de não prejudicar o entendimento do post inteiro.

valeu pela ajuda mais uma vez.

Ah, antes que eu me esqueça: você disse que #13 corresponde à tecla ENTER. Há alguma tabela onde eu possa saber todas as outras teclas que possa me passar ou mandar o link:huh:?

Abraços!

  • Membro VIP
Postado
Entendi perfeitamente o que quis dizer, o problema é que essa parte específica me confundiu, apesar de não prejudicar o entendimento do post inteiro.

Quando temos qualquer componente que receba foco, o foco fica sempre em algum deles, e portanto nunca no Form, assim o evento OnKeyPress/Down dele não será chamado..

valeu pela ajuda mais uma vez.

Disponha :)

Ah, antes que eu me esqueça: você disse que #13 corresponde à tecla ENTER. Há alguma tabela onde eu possa saber todas as outras teclas que possa me passar ou mandar o link:huh:?

Você mesmo pode descobrir os códigos, se quiser..

Crie um projeto em branco e adicione no evento OnKeyPress (ou OnKeyDown) do Form1:

ShowMessage(IntToStr(Ord(Key)));

E agora basta apertar as teclas!

E tabelas:

Por nome: http://www.delphi.eti.br/ver_dica.php?id=1368

Por ASCII: http://pt.wikipedia.org/wiki/ASCII (coluna "Decimal")

Abraços!

PS: Se o caso foi resolvido basta informar que eu mesmo fecho, não precisa se preocupar..

Postado

Mais do que resolvido. rsrs

Mas se permite a pertinência em perguntar mais uma coisa:

Fiz o que você falou para descobrir o código das teclas. Coloquei primeiro no OnKeyPress e percebi que algumas teclas de acento e as setas (cima,baixo,direita,esquerda) não apareciam neste evento. Elas só apareceram no evento OnKeyDown. Por quê?:D

  • Membro VIP
Postado

Olá amigo!

Pergunta muito boa, me fez correr atrás de descobrir..

Com a ajuda de um profissional da area e com a ajuda do delphi cheguei a seguinte conclusão:

O evento OnKeyPress não trabalha com teclas que não são do padrão ASCII (F1, direcionais e control são exemplos)

The Key parameter in the OnKeyPress event handler is of type Char; therefore, the OnKeyPress event registers the ASCII character of the key pressed. Keys that don't correspond to an ASCII Char value (Shift or F1, for example) don't generate an OnKeyPress event. Key combinations (such as Shift+A), generate only one OnKeyPress event (for this example, Shift+A results in a Key value of “A” if Caps Lock is off). To respond to non-ASCII keys or key combinations, use the OnKeyDown or OnKeyUp event handlers.

Já o evento OnKeyDown trabalha com todas as teclas do teclado, inclusive as non-ASCII:

Use the OnKeyDown event handler to specify special processing to occur when a key is pressed. The OnKeyDown handler can respond to all keyboard keys, including function keys and keys combined with the Shift, Alt, and Ctrl keys, and pressed mouse buttons.

Fontes: ajuda do Delphi..

Abraços e qualquer dúvida poste!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!