Hallo,
ich habe ein unangenehmes Problem mit einer
MDI-Anwendung: aus einigen der
MDI-Children meiner Anwendung können modale Dialoge aufgeschaltet werden. Während eines modalen Dialogs ist bekanntlich eine weitere Bedienung der Anwendung nicht möglich. Zuerst muss dieser Dialog beendet werden, bevor ich wieder Menü- oder sonstige Bedienungen machen kann.
Dachte ich bisher. Aber jetzt habe ich festgestellt, das das garnicht so generell stimmt. Es ist, auch wenn ein modaler Dialog aufgeschaltet ist, möglich, mit Strg+F4 ein
MDI-Child zu schliessen oder mit Strg+F6 zu einem anderen
MDI-Child zu wechseln. Insbesondere stört mich das Schliessen. Wenn dasjenige
MDI-Child geschlossen wird, aus dem der modale Dialog aufgeschaltet wurde, fehlt dem plötzlich sein Parent und es kommt natürlich zu entsprechenden Fehlermeldungen. Ich habe jetzt versucht, die Einträge "Schliessen Strg+F4" und "Nächstes Strg+F6" mit nachfolgendem Code, den ich in die FormCreate-Methode des modalen Dialogs eingebaut habe, testweise für das erste
MDI-Child zu disablen:
Delphi-Quellcode:
{ Handle des Systemmenüs beschaffen }
Menu := GetSystemMenu (FormMain.MDIChildren [1].Handle,
False);
{ Schliessen des Fensters (Strg+F4) verhindern }
MenuItemClosePreviousState := EnableMenuItemWord (Menu,
sc_Close,
mf_ByCommand
or mf_Grayed
or mf_Disabled);
{ Weiterschalten (Strg+F6) verhindern }
MenuItemNextWindowPreviousState := EnableMenuItemWord (Menu,
sc_NextWindow,
mf_ByCommand
or mf_Grayed
or mf_Disabled);
EnableMenuItemWord entspricht EnableMenuItem, hat aber als Funktionstyp Word und nicht BOOL wie in Delphi6. Damit bekomme ich den vorherigen Status offenbar auch richtig zurückgeliefert, so wie er in der Hilfe beschrieben ist.
In der FormClose-Methode werden die Einträge wieder enabled.
Das scheint auch zu funktionieren, denn wenn ich jetzt aus dem aufgeschalteten
MDI-Child einen modalen Dialog aufschalte, wird das X rechts in der Caption-Leiste disabled und wenn ich den Dialog ganz normal schliesse, wird es wieder bedienbar. Aber trotzdem kommt Strg-F4 immer noch durch. Dabei verschwinden der modale Dialog und das
MDI-Child und die Anwendung ist nicht bedienbar, als ob der Dialog noch da wäre.
Hat jemand vielleicht eine Lösung des Problems? Ich möchte Strg+F4 und Strg+F6 abschalten, wenn ein modaler Dialog aufgeschaltet ist.
Vielen Dank schonmal
Klaus