Hola etioalex.
Si los forms involucrados están corriendo en un mismo equipo, otra manera que se me ocurre es usando FindWindow y el mensaje WM_COPYDATA.
Pone esto en el evento OnClose del Form2:
Código:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
HandleReceptor: THandle;
CopyDataStruct: TCopyDataStruct;
begin
CopyDataStruct.dwData:= 1; // cualquier valor para evaluar en Form1
HandleReceptor:= FindWindow(PChar('TForm1'),PChar('Form1'));
if HandleReceptor <> 0 then
SendMessage(HandleReceptor,WM_COPYDATA,Integer(Handle),
Integer(@CopyDataStruct));
Action:= caFree;
end;
Y este código en el otro form:
Código:
TForm1 = class(TForm)
private
procedure WMCopyData(var Msg : TWMCopyData) ; message WM_COPYDATA;
public
end;
...
implementation
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
begin
if Msg.CopyDataStruct.dwData = 1 then
ShowMessage('Form2 ha sido cerrado'); // acá hace lo que gustes
end;
Saludos.