AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi MDI-Children nicht über Strg-F4 schliessen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

MDI-Children nicht über Strg-F4 schliessen lassen

Ein Thema von DelphiKlaus · begonnen am 15. Mär 2007 · letzter Beitrag vom 15. Mär 2007
Antwort Antwort
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
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#2

Re: MDI-Children nicht über Strg-F4 schliessen lassen

  Alt 15. Mär 2007, 08:57
Das Problem kann ich absolut nicht nachvollziehen, wenn ich aus einem MDI-Child ein Fenster Modal öffne (mit Form.ShowModal), dann kann ich so oft ich will STRG+F4 drücken ohne dass was passiert...

Kannst du mal deinen Aufruf des Modalen Fensters hier posten, vielleicht liegt es ja da dran.
  Mit Zitat antworten Zitat
DelphiKlaus

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

Re: MDI-Children nicht über Strg-F4 schliessen lassen

  Alt 15. Mär 2007, 09:36
Das Formular wird nach folgendem Muster erzeugt:

Delphi-Quellcode:
  FormModal := TFormModal.Create (Self);

  if FormModal.ShowFormular (....) = mrOk then
    begin

    end;

  FormModal.Release;
ShowFormular ist eine Public-Methode, in der die übergebenen Parameter, die ich oben weggelassen habe, weil sie nur für den Inhalt des Dialogs relevant sind, ausgewertet werden und anschliessend ShowModal aufgerufen wird.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz