Hola,
Lo primero ocurre porque estos formularios "MDIChild" se muestran visibles según se crean: y no puede ser de otra forma, además, parece ser. Así que el asunto pasa por crearlos cuando los necesites. Si echas un vistazo al archivo ".dpr" de la aplicación que creamos... en este Hilo, verás algo como esto:
Código Delphi
[-]
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' ,
Unit2 in 'Unit2.pas' ;
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Pues bien, se trata de eliminar la línea "Application.CreateForm(TForm2, Form2);" para que el formulario no se cree y tampoco se muestre, por tanto.
Respecto de lo segundo, la cuestión está en utilizar el evento "OnClose" de los formularios "MDIChild":
Código Delphi
[-]
procedure TForm2.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
De ese modo cuando se cierre el formulario este no se ocultará (o minimizará) sino que será liberado.
En todo caso me doy cuenta de mis limitaciones, en general, y, en particular, con las aplicaciones MDI...
Lo mismo hay mejores respuestas de otros compañeros. Pueden esperarse, desde luego.