Hola jafera.
Cita:
|
Si desde este segundo child vuelvo a llamar al primero, se me abre una nueva copia del form, cosa que no quiero
|
Una aplicación
MDI está compuesta por ventanas hijas, área de cliente o frame y la ventana de clientes. Esta última es la que administra a todas las ventanas
MDIChild que de ella dependen.
Para que no te suceda lo que comentas, es necesario que una ventana hija llame a otra mediante la ventana padre.
Para ejemplificar supongamos que tenemos: frmMain (MDIForm) con un
TMainMenu y dos
TMenuItem, cada uno de los cuales llama a las ventanas frmChild1 y frmChild2 (MDIChilds). En cada ventana hija, además tenemos un
TButton que llama a la otra ventana hija.
frmMain:
Código Delphi
[-]
implementation
uses Unit2, Unit3;
procedure TfrmMain.frmChild1AbrirClick(Sender: TObject);
begin
TfrmChild1.Mostrar;
end;
procedure TfrmMain.frmChild2AbrirClick(Sender: TObject);
begin
TfrmChild2.Mostrar;
end;
frmChild1:
Código Delphi
[-]
implementation
uses Unit1;
class procedure TfrmChild1.Mostrar;
begin
if not Assigned(frmChild1) then
frmChild1:= TfrmChild1.Create(nil)
else
frmChild1.BringToFront;
end;
procedure TfrmChild1.btnShowChild2Click(Sender: TObject);
begin
frmMain.frmChild2AbrirClick(Self); end;
procedure TfrmChild1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure TfrmChild1.FormDestroy(Sender: TObject);
begin
frmChild1:= nil; end;
frmChild2:
Código Delphi
[-]
uses Unit1;
class procedure TfrmChild2.Mostrar;
begin
if not Assigned(frmChild2) then
frmChild2:= TfrmChild2.Create(nil)
else
frmChild2.BringToFront;
end;
procedure TfrmChild2.btnShowChild1Click(Sender: TObject);
begin
frmMain.frmChild1AbrirClick(Self); end;
procedure TfrmChild2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure TfrmChild2.FormDestroy(Sender: TObject);
begin
frmChild2:= nil; end;
De este modo no te abrirá una nueva copia del form
MDIChild.
Saludos.