DELPHI - Percorrer Edits alterando evento KeyDown

29/12/2020

0

Bom dia!

Existe alguma possibilidade de percorrer todos os Edits de um formulário e alterar o evento OnKeyDown dos mesmos?

Obrigado desde já!
Nomad

Nomad

Responder

Post mais votado

29/12/2020

você quer somente aqueles que estão diretamente no form ou todos aqueles contidos, mesmo que em contêineres internos?

se quer somente os que estão diretamente no form:
procedure TForm5.FormCreate(Sender: TObject);
var i: integer;
begin
  for i := 0 to TForm5.ControlCount-1 do
    if TForm5.Controls[i] is TEdit then
      TEdit(TForm5.Controls[i]).OnKeyPress := KeyPressGeral;
end;

Se você quer tratar todos os edits, precisará de uma função recursiva:
procedure TForm5.FormCreate(Sender: TObject);
  // função recursiva para trocar a função do evento KeyPress
  procedure TrocaKeyPress(Container: TWinControl);
  var i: integer;
  begin
    for i := 0 to Container.ControlCount-1 do
      if Container.Controls[i] is TEdit then
      begin
        TEdit(Container.Controls[i]).Text := 'Teste';
        TEdit(Container.Controls[i]).OnKeyPress := KeyPressGeral;
      end
      else
      if (Container.Controls[i] is TWinControl) then
        TrocaKeyPress(TWinControl(Container.Controls[i]));
  end;
begin
  TrocaKeyPress(Self);
end;

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

29/12/2020

Nomad

UP!
Responder

29/12/2020

Emerson Nascimento

desculpe, coloquei keypress.
basta trocar para keydown.
Responder

04/01/2021

Nomad

Boa tarde, Emerson!

Agradeço a sua ajuda... E no caso é somente nos que estão no Form mesmo. O KeyDown dos edits recebe o código "if Key = VK_Return then
SpeedButton1Click(self);".

Eu queria "limpar" isso ao passar pela condição, anular o keydown dos edits. Porém não estou sabendo qual parâmetro passar, tentei com o nil mas não dá certo.
Responder

05/01/2021

Emerson Nascimento

não deu certo com nil? assim?
procedure TForm5.FormCreate(Sender: TObject);
var i: integer;
begin
  for i := 0 to TForm5.ControlCount-1 do
    if TForm5.Controls[i] is TEdit then
      TEdit(TForm5.Controls[i]).OnKeyPress := nil;
end;
Responder

05/01/2021

Nomad

Pior que não, achei que daria :(
Responder

05/01/2021

Nomad

Boa tarde, Emerson!

Fiz algumas alterações aqui e a principio de tudo certo, fiz me baseando no que me passou. Agradeço muito a sua atenção e ajuda, continue assim!

Obrigado!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar