In einer
MDI-Anwendung werfen ja zuerst alle geöffneten
MDI-Childs ihr eigenes OnCloseQuery-Event bevor das OnCloseQuery-Event vom
MDI-Parent ausgelöst wird.
Das Problem an der Sache: Haben mehrere der
MDI-Childs intern den Status "Verändert und ungespeichert", so erzeugt jedes Child ein neues "Willste mich nicht lieber speichern?"-Fenster da das im OnCloseQuery so angelegt ist. Ich möchte es aber etwas differenzieren:
Wird nur ein ungespeichertes
MDI-Child geschlossen, so soll nur gefragt werden ob diese eine Datei gespeichert werden soll. Wird aber die ganze Anwendung geschlossen, so soll ein anderes Fenster erscheinen, worin alle ungespeicherten Dateien (sprich
MDI-Childs) aufgelistet und auswählbar sind. Bei letzterer Variante ist natürlich nicht nötig, dass jedes Child seinen eigenen, im OnCloseQuery-Eventhandler angelegten Nachfragedialog öffnet.
Gibt es eine Möglichkeit, innerhalb eines
MDI-Child abzufragen, ob die Close-Anforderung nur das eine Child betrifft oder die gesamte Anwendung? Sprich: Hat der User auf das X vom Child geklickt oder auf das X der Anwendung?
EDIT: Ich habe eine halbwegs praktikable Lösung gefunden. Im WndProc des Hauptformulars fange ich WM_CLOSE ab. MainForm.WndProc wird zum Glück vor den Close-Prozeduren der
MDI-Childs aufgerufen. Dadurch kann ich eine anwendungsglobale Variable setzen und im OnCloseQuery der
MDI-Childs abfragen.