Tengo una funcion que me hace precisamente eso
Código Delphi
[-]procedure ShowFormMDI(TfrmClass: TFormClass;bMultiInstace : boolean);
var
i : SmallInt;
F : TForm;
begin
if not bMultiInstace then
for i := Application.MainForm.MDIChildCount - 1 downto 0 do
begin
F := Application.MainForm.MDIChildren[i];
if F.ClassType = TfrmClass then
begin
if F.WindowState = wsMinimized then
F.WindowState := wsNormal;
F.BringToFront;
Exit;
end;
end;
with TfrmClass.Create(Application) do
Show;
end;
y lo llamo de la siguiente forma
Código Delphi
[-]ShowFormMDI(TFormaHija,false);
El segundo parametro te indica si se permite o no que se llame mas de una vez al formulario. Si no lo permites y el formulario esta abierto lo activara.
Espero te sirva
Saludos.