La otra opción, como ya te he dicho puede ser utilizando un evento. En mi caso más de una vez he utilizado algo similar a esto.
En el formulario MDI que vas a destruir defines un evento tal que así:
Código Delphi
[-]
published
property MyOnClose:TNotifyEvent read FMyOnClose write FMyOnClose;
Cuando creas ese formulario "enganchas" el evento a un procedimiento tuyo para recibirlo:
Código Delphi
[-]
Form2 := TForm2.Create(Application);
Form2.MyOnClose := _CerrarForm;
Form2.Show;
Al cerrar el form2 (el MDIChild) antes de destruirlo "aviso" utilizando el evento:
Código Delphi
[-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Assigned(Self.FMyOnClose) then begin
Self.MyOnClose(Self);
end;
Action := caFree;
end;
Y en el momento de destruir el Form2 (MDIChild) al leventar el evento, llegará el control a mi procedimiento:
Código Delphi
[-]
procedure TForm1._CerrarForm(Sender: TObject);
begin
MessageDlg('Se está cerrando el formulario: ' + TForm(Sender).Name, mtInformation, [mbOK], 0);
end;
Parece más complejo de lo que es, pero en realidad es bastante sencillo.
Te adjunto el código para que veas cómo funciona.