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:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin 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 jasocul: Beitrag geprüft am 06.04.2006
[meta]MDI Child Children Schließen[/meta]