View Single Post
  #9  
Old 25/04/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Rep Power: 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
Quote:
Originally Posted by granodetoro View Post
y donde pongo el codigo me olvide preguntar
El código va en el MDIForm, que por supuesto debe incluir las unidades que definen las ventanas MDIChilds.



Otra opcion es que sea el propio MDIChild quién verifique su existencia, para eso debes usar métodos de clase.
Código Delphi [-]
unit Unit2;
....
type
  TMDIChild = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
  private
  public
    class procedure MostrarChild;
  end;

var
  MDIChild: TMDIChild;

implementation 

class procedure TMDIChild.MostrarChild;
begin
  if not Assigned(MDIChild) then
     MDIChild:= TMDIChild.Create(nil);
  MDIChild.Show;
end;

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

procedure TMDIChild.FormDestroy(Sender: TObject);
begin
  MDIChild:= nil; // necesario, evita repetir la creacion en MostrarChild
end;
end.

Y llamarlo desde el MDIForm de este modo:
Código Delphi [-]
uses Unit2;
....
begin
   TMDIChild.MostrarChild;
end;
En todos los casos tenés que quitar las ventanas hijas de auto-create forms.

Y otra, a mi gusto la mejor, es usar un patrón Singleton. Si buscas con ese término, hay mucho redactado al respecto .


Un saludo.
__________________
Daniel Didriksen

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