Du kannst zum Beispiel eine TNotifyEvent-Variable beim eingebetteten TForm-Objekt anbieten, bei der sich das Hauptformular mit einem event handler eintragen kann.
Dann überschreibst du den message handler des Unterformulars mit
Delphi-Quellcode:
protected
procedure WndProc(var Message: TMessage); override;
mit
Delphi-Quellcode:
procedure TForm2.WndProc(var Message: TMessage);
begin
inherited WndProc(Message);
if assigned(NotifyMainFormEvent) then NotifyMainFormEvent(self);
end;
(ps. hier müsstest du die message in einer public-Variable zugänglich machen oder einen eigenen Eventtyp als procedure of object definieren, bei dem standardmäßig ein var-Parameter übergeben wird)
alternativ kannst du auch beim Hauptformular eigene messages definieren und mit
procedure OnForwardedFormEvent(var Message: TMessage); Message WM_IRGENDWAS;
abarbeiten, dabei ist WM_IRGENDWAS >= WM_USER. Du schickst dann Messages aus dem Unterformular heraus an das Hauptformular (PostMessage, SendMessage).
letzteres funktioniert auch über Threadgrenzen hinaus.