Navegar pelos campos Com Enter em um form aberto dentro de um outro.

26/11/2020

0

Eu sei que para navegar com o Enter tem que configura o
KeyPreview := True;
mais quando o form e aberto dentro de outro form as coias ficam diferentes...

Aqui vou deixar a chamada do meu segundo form

procedure TForm1.btnForm2Click(Sender: TObject);
begin
  if Form2= Nil then
  begin
    Form2 := TForm2.Create(self);
    Form2.Parent := Form1;
  end;
  Form2.Show;
end;

Agora com o segundo form aberto quando eu tento navegar com o Enter ou com as cetas ele aponta o controle ativo para o Form1 mais ao meu ver deveria ser para o objeto com o qual o usuário ira utilizar. Lembrando que o Form2 também está com o
KeyPreview := True;
.

procedure TForm2 .FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  // Se o controle ativo for Memo ou ComboBox ou DBGrid não passa para o próximo Controle
  if ((key = VK_RETURN) or (key = VK_DOWN)) and not (Copy(TControl(ActiveControl).Name,1,3) = 'mem.cbb.dbg') then  // <== TControl(ActiveControl).Name fica como se o form1 o controle ativo.
    Perform(WM_NEXTDLGCTL,0,0);

  if (key = VK_UP) and not (Pos(Copy(TControl(Sender).Name,1,3),'mem.cbb.dbg') > 0) then
    Perform(WM_NEXTDLGCTL,1,0);
end;


Pelo que eu perceber o
procedure TForm2 .FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
está sendo chamada com o parâmetro
 Sender: TObject;
igual a Nil
Eduardo Silva

Eduardo Silva

Responder

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

Aceitar