Autor Beitrag
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 15.02.06 15:27 
Sicheres Schließen der Childs einer MDI-Anwendung

Ein bekanntes Phänomen beim Schließen einer MDI-Anwendung mit offenen MDIChilds ist eine "Allgemeine Schutzverletzung".

Soweit ich feststellen konnte, liegt das daran, dass die Childs nicht schnell genug geschlossen werden können.

Folgende Routine behebt das Problem:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Folgende Routine ist erforderlich, da es sonst zu einer Zugriffsverletzung kommt, wenn noch
  // MDI-Child-Fenster geöffnet sind.
  while MDIChildCount > 0 do
  begin
    if TForm(MDIChildren[MDIChildCount - 1]).Owner = self then
    begin
      TForm(MDIChildren[MDIChildCount - 1]).Close;
    end;
    Application.ProcessMessages;
  end;
end;

frmMain ist dabei die Hauptform der MDI-Anwendung.

Eine gesonderte Behandlung könnte erforderlich werden, wenn ein MDIChild im CloseQuery das Schließen verweigert.

Jedes MDI-Child muss natürlich im OnClose ein Action := caFree haben. Oder zumindest ganz sicher geschlossen werden (z.B. FreeAndNil).
Wird das nicht gemacht, läuft das Standardverfahren beim Schließen eines MDI-Childs. Und das ist lediglich das Minimieren des Fensters.
Moderiert von user profile iconjasocul: Beitrag geprüft am 06.04.2006
[meta]MDI Child Children Schließen[/meta]