Yo uso una pequeña variante de
jcarteagaf. Al hacerlo así, tenemos que añadir los "uses" de la ventana que queremos crear; con el tiempo y muchos Forms hijos, acabamos con referencias circulares y un dolor de cabeza.
Código Delphi
[-]
type TOpen = (oCliente, oFactura, oProductos);
var OpenForm : Array [TOpen] of TForm = (TFrmcliente, TfrmFactura, TFrmProductos);
function ShowForm(Abrir : TOpen) :TForm;
begin
Result := TForm(OpenForm(Abrir)).Create(Application)
end;
El tipo "TOpen" lo añado a una unidad publica.pas (sin form asociado), todas las ventanas hacen uso de ella.
Cada ventana hija, tiene en el Onclose Action := cafree, por lo que se libera de memoria. Tampoco uso las variables globales FrmCliente, FrmFactura que propone delphi.
Saludos