Saludos, aqui hay una solucion:
Primero:
En la forma que creas al presionar el botón en el evento onClose pon entas línea:
Código:
Action := caFree;
de esta manera cada vez que cierres la forma se liberará sola sin invocar el destructor free.
Ahora necesitas una función que te diga si la forma que quieres crear ya está creada, pudes usar esta:
Código:
function TForm2.existe_forma(AClase: string): Boolean;
var
i:Integer;
begin
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i].ClassName = AClase then
Result := True
else
Result := false;
end;
Ahora en el botón que crea la forma puedes poner este código, yo estoy creando la forma 'Form3':
Código:
if not existe_forma('TForm3') then begin
Form3 := TForm3.Create(Self);
Form3.Show;
end;
Espero te sirva.