Urgente...Como controlar as janelas na aplicação...

Delphi

05/11/2003

Como posso fazer para controlar as janelas abertas pelo usuário, para que possa mostrar para o usuário os formulários que estão abertos, ex: no Word se vc abre varios documentos então vc vai ao menu em janelas e la está os doc abertos e vc pode navegar pelos mesmos...desde já agradeço a colaboração...Obrigado :D


Emanoel Assunção

Emanoel Assunção

Curtidas 0

Respostas

Carlosk

Carlosk

05/11/2003

isso se chama aplicativos MDI... procure na internet q vc ira encontrar...


GOSTEI 0
Caninha51

Caninha51

05/11/2003

Supondo q sua aplicação seja MDI...

Vamos lá...
No meu caso ficou mais fácil pq eu trabalho com heranças, então eu só precisei colocar em 1 form. Caso naum seja, tem q colocar em um dos forms e apontar todos os eventos de todos os form para oq o form q vc colocou.

Coloque um MainMenu no form principal, e adicione um item, pode ser ´Janelas´.

Crie uma variável global(De preferência no form principal) do tipo TMenuItem.

No meu caso a variável foi NovoItem:TMenuItem;

No evento OnShow do Form q tu escolheu coloque:

NovoItem := TMenuItem.Create(Self);
NovoItem.Caption := TForm(Sender).Caption;
NovoItem.OnClick := frmPri.mniAbjClick;
with frmPri.mniJan do
begin
Add(NovoItem);
Enabled := Count > 0;
end;

No OnClose:
with frmPri.mniJan do //mniJan é o TMenuItem ´Janelas´
begin
Remove(Find(TForm(Sender).Caption));
Enabled := Count > 0;
end;
Action := caFree;

No OnDeactivate:
with frmPri.mniJan do
If Find(TForm(Sender).Caption) <> nil then
Find(TForm(Sender).Caption).Checked := False;
If frmPri.MDIChildCount > 0 then
frmPri.ActiveMDIChild.WindowState := wsMaximized;

No OnActivate:
with frmPri.mniJan do
If Find(TForm(Sender).Caption) <> nil then
Find(TForm(Sender).Caption).Checked := True;

Crie a procedure frmPri.mniAbjClick(No seu form principal), q eh pra atribrui ao Onclick do novo item q vc vai criar dinamicamente.

procedure TfrmPri.mniAbjClick(Sender: TObject);
begin
LockWindowUpdate(Handle); // Para evitar o efeito da maximização
((Sender as TMenuItem).Owner as Tform).Show;
((Sender as TMenuItem).Owner as Tform).WindowState := wsMaximized;
LockWindowUpdate(0);
end;


Pronto, acho q eh soh isso!
É pra funcionar... Qualquer dúvida, dá o toke!

Falow

Caninha51


GOSTEI 0
POSTAR