Sie können die Mainform ein OnClose
oder OnDestroy
Ereignishandler erstellt es zu jedem MDI Kind zuweisen. Jedes Mal, wenn ein MDI-Client geschlossen/zerstört wird, kann der Handler prüfen, ob noch weitere untergeordnete MDI-Formulare geöffnet sind, und wenn nicht, dann tun Sie, was immer Sie tun müssen.
procedure TMainForm.ChildClosed(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
// the child being closed is still in the MDIChild list as it has not been freed yet...
if MDIChildCount = 1 then
begin
// do work
end;
end;
Oder:
const
APPWM_CHECK_MDI_CHILDREN = WM_APP + 1;
procedure TMainForm.ChildDestroyed(Sender: TObject);
begin
PostMessage(Handle, APPWM_CHECK_MDI_CHILDREN, 0, 0);
end;
procedure TMainForm.WndProc(var Message: TMessage);
begin
if Message.Msg = APPWM_CHECK_MDI_CHILDREN then
begin
if MDIChildCount = 0 then
begin
// do work
end;
Exit;
end;
inherited;
end;
+1 Nice! Besser als meins. ;-) – NGLN
@NGLN - Danke! Dein ist jedoch mächtiger, falls du wissen musst, wann ein Kind das und das tut ... :) –
NGLN, Sertac Akyus und Remy Lebeau. Danke für deine Antworten, alle exzellent. Sie sind sehr gut. Für diese Situation war der beste Code Sertac Akyuz. Ist einfacher und hat mein Problem gelöst. NGLN und Remy, ich habe deinen Code für zukünftige Situationen gespeichert. Vielen Dank. – Delphiman