El mensaje original es de hace 4 años... pero bueno, las cosas en ese sentido no han cambiado mucho, los MDI siguen estando por ahí (aunque se desaconseja su uso) y la gente trabaja como quiere y le da la gana (esto último siempre ha sido así
).
El método que propones, me gusta aunque le veo un bug que no me gusta. La ventana que se abre oculta la barra de herramientas del supuesto MDI, al no ser un entorno MDI real, es normal que ocurra.
Otra solución del mismo estilo, es crear las ventanas asignándoles el padre hacia la ventana principal:
Código Delphi
[-]
childWindow := TForm1.Create(frmMain);
childWindow.Parent := frmMain
Aunque tampoco me convence mucho los efectos que tiene.
Yo si prefiero a los MDI reales y la forma de trabajo con ellos me gusta bastante.
No suelo ocultar las ventanas, sino que las destruyo, pero alguna vez intenté esto y funcionaba:
Código Delphi
[-]
type
TBaseForm = class(TForm)
private
Fvisible: Boolean;
procedure SetVisible(const Value: Boolean);
public
constructor Create(Aowner:TComponent); override;
procedure Show;
procedure Hide;
published
property Visible:Boolean read Fvisible write SetVisible;
end;
implementation
uses publica;
{$R *.dfm}
constructor TBaseForm.Create(Aowner: TComponent);
begin
inherited Create(aowner);
visible := fsvisible in FFormState;
end;
procedure TBaseForm.Hide;
begin
ShowWindow(Handle, sw_HIDE);
FVisible := False;
DoHide;
end;
procedure TBaseForm.SetVisible(const Value: Boolean);
begin
if Value <> FVisible then
begin
if Value then Show
else Hide;
end;
end;
procedure TBaseForm.Show;
begin
ShowWindow(Handle, sw_Show);
FVisible := True;
DoShow;
end;
Saludos