Moin Mirlin,
soweit ich das überblicke wird wieder alles freigegeben:
Dadurch, dass Du beim Create MainForm als Owner angibst, würde das ChildForm spätestens beim zerstören (freigeben) von Mainform mit freigegeben werden.
Durch Action := caFree wird es dann beim Schliessen auch wieder freigegeben.
Das mit der WindowProcedure kannst Du auch einfacher haben:
Delphi-Quellcode:
// Unter FormCreate in TMainForm = class(TForm)
procedure WndProc(var msg: TMessage); override;
// In Implementation
procedure TMainForm.WndProc(var msg: TMessage);
begin
if Msg = Msg_SetToNil then
begin
Child := nil;
exit; // Die "normale" WndProc kennt die Message ja sowieso nicht
end;
inherited WndProc(msg);
end;
Falls da sonst nichts drin ist, könnten nun die FormCreate und CloseChild entfallen.