Einzelnen Beitrag anzeigen

DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#1

MDI-Children nicht über Strg-F4 schliessen lassen

  Alt 15. Mär 2007, 08:52
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
  Mit Zitat antworten Zitat