Ver Mensaje Individual
  #2  
Antiguo 07-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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); // llamar a otro MDIChild
end;

procedure TfrmChild1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;

procedure TfrmChild1.FormDestroy(Sender: TObject);
begin
  frmChild1:= nil;  // necesario por: if not Assigned...
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); // llamar a otro MDIChild
end;

procedure TfrmChild2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;

procedure TfrmChild2.FormDestroy(Sender: TObject);
begin
  frmChild2:= nil; // necesario por: if not Assigned...
end;
De este modo no te abrirá una nueva copia del form MDIChild.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-06-2011 a las 12:54:44.
Responder Con Cita