Jump to content
Fórum Script Brasil
  • 0

(Resolvido) focar janela filha (MDI)


vms

Question

stou fazendo um programa usando MDI (não é editor de texto)

tenho 3 janelas filhas e cada uma so abre uma vez

como faço pra aparecer a lista de janelas filhas aberta no menu (Janela)

onde eu clico e foca a janela desejada?

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Olá Vms...

Adicione no menu do seu form principal um menu Janela;

Adicione na uses do seu form filho a clausula Menus;

Adicione na uses do form filho a unit do form principal, porque é dele que será puxado o menu;

No OnCreate do seu form filho coloque o seguinte código:

procedure TForm1.FormCreate(Sender: TObject);
var MyMenu: TMenuItem;
begin
  FrmPrincipal.Janela1.Tag := FrmPrincipal.Janela1.Tag + 1;
  Mymenu := TMenuItem.Create(FrmPrincipal.Janela1);
  MyMenu.Caption := Caption;
  MyMenu.OnClick := FormToFront;
  MyMenu.Tag := FrmPrincipal.Janela1.Tag;
  Tag := MyMenu.Tag;
  FrmPrincipal.Janela1.Add(MyMenu);
end;
Esse evento fará aparecer o nome do form filho no menu. Onde Janela1 é o nome do Menu que você criou. No evento OnDestroy do form filho coloque o seguinte código:
var I: Integer;
begin
  for I := 0 to FrmPrincipal.Janela1.Count - 1 do
  begin
    if FrmPrincipal.Janela1.Items[i].Tag = Tag then
    begin
      FrmPrincipal.Janela1.Delete(I);
      Break;
    end;
  end;
end;
Este código irá excluir do menu caso o form seja fechado. Adicione este procedimento, que irá fazer ativar a janela clicada no menu
procedure TForm1.FormToFront(Sender: TObject);
begin
  BringToFront;
end;

Para esete código funcionar você terá que declarar ele junto com os procedimentos que o delphi declara automaticamente...

É isso ai, qualquer dúvida posta ai

Abraços

Edited by Micheus
Substituída tag QUOTE por CODE. Por favor utilize a tag adequada.
Link to comment
Share on other sites

  • 0

Opa Vms

Basta você colocar no evento OnDeactivate do form filho este código:

procedure TFrmClientes.FormDeactivate(Sender: TObject);

begin

MyMenu.Checked := False;

end;

Este código irá desmarcar o menu quando este não estiver ativo.

Pegue a variável var MyMenu: TMenuItem; que está no OnCreate e coloque ela como variável global, porque o procedimento acima irá usar ela também.

O seu OnCreate irá ficar da seguinte forma:

procedure TFrmClientes.FormCreate(Sender: TObject);

begin

FrmPrincipal.Janela1.Tag := FrmPrincipal.Janela1.Tag + 1;

Mymenu := TMenuItem.Create(FrmPrincipal.Janela1);

MyMenu.Caption := Caption;

MyMenu.OnClick := FormToFront;

MyMenu.Tag := FrmPrincipal.Janela1.Tag;

Tag := MyMenu.Tag;

FrmPrincipal.Janela1.Add(MyMenu);

end;

O procedimento que traz o form clicado no menu para frente, deixe ele da seguinte forma:

procedure TFrmClientes.FormToFront(Sender: TObject);

begin

BringToFront;

MyMenu.Checked := True;

end;

No Evento OnActivate do form filho coloque este código para que quando você abrir o form ele já esteja marcado no menu.

procedure TFrmContasReceber.FormActivate(Sender: TObject);

begin

MyMenu.Checked := True;

end;

O evento OnDestroy ficará da mesma forma.

Qualquer dúvida posta ai.

Abraços

Edited by Vivendo&Aprendendo
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...