Ich hatte mal ein ähnliches problem und habe das wie folgt geloest.
////////////////////////////////////////////////////////////////////////////
procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Canclose := CloseQuery;
end;
/////////////////////////////////////////////////////////////////////////
function TFormMain.CloseQuery: boolean;
var
anz_mdi, i: integer;
begin
if MessageDlg('Programm beenden?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
exit;
anz_mdi := (FormMain.MDIChildCount - 1);
// Close verändert MDIChildCount, daher nicht in For-Schleifen-Kopf!!!
for i := anz_mdi downto 0 do
try
if FormMain.MDIChildren[i].CloseQuery then
begin
FormMain.MDIChildren[i].Close;
FormMain.MDIChildren[i].Free; // Sonst läuft MDIChildCount nicht sauber
result := true;
end;
except
result := false;
// evtl. hier Fehler in Seq.-Datei Protokollieren;
end;
end;
///////////////////////////////////////////////////////////////