Yo agregaría y creo que es
MUY IMPORTANTE la captura de errores. Con el código que te pasa Jhonny si se produce un error en la ejecución del formulario, este no se libera de memoria hasta que se destruya el Owner.
Código:
Form1:=TForm1.Create(self);
try
Form1.FormStyle:=fsNormal;
Form1.Visible:=false;
Form1.ShowModal;
finally
Form1.Free;
end;
Y en particular, yo lo tendría por default como un formulario normal, y cuando quiero que sea MDIChild cambio el FormStyle así evito que "flashee" cuando se lo quiere mostrar como modal.