![]() |
Problem mit MDI Child Fenster und Systemmenü
Hallo @all,
ich habe ein kleines Problem mit einer MDI Anwendung. Beschreibung: 1 Hauptfenster mit TMainMenu Kindfenster mit TMainMenu Ein Kindfenster integriert seine Menüitems in die des Hauptfensters. Problem: Im Hauptfenster ist ein Kindefenster geöffnet und maximiert. Wenn ich nun einen Menüpunkt des Hauptfensters deaktiviere, so wird im Systemmenü des Kindfensters rechts oben das X (Close) deaktiviert. Der deaktivierte Menüpunkt ist sozusagen in der obersten Ebene und kein Untermenüpunkt (Also einer von den Menüpunkten, die oben in der Menüleiste immer sichtbar sind). Das deaktivierte X kann ich im Moment nur wieder freigeben, wenn ich das Fenster einmal auf seine normale Größe bringe. Dies passiert nur, wenn das Kindfenster maximiert ist. Ich habe schon mit EnableMenuItem versucht das X wieder freizugeben, jedoch ohne Erfolg. Ich verwende Delphi 5 Professional. Ich hoffe ich habe mich nicht zu umständlich ausgedrückt. Hat jemand eine Erklärung für dieses Phänomen bzw. einen Tipp wie ich das deaktivierte X verhindern kann? viele Grüße Ronald |
Re: Problem mit MDI Child Fenster und Systemmenü
Herzlich willkommen in der Delphi-PRAXiS, Ronald.
Ich habe ein Minimal-MDI-Projekt mit D5 Enterprise auf der Basis der MDI-Anwendung aus der Galerie aufgesetzt. Dazu habe ich in der MainForm jedem Hauptmenüpunkt einen GroupIndex in der Folge 0, 1, 3, 4 verpasst. Im MDIChild habe ich ein MainMenu eingeführt mit einem Hauptmenüpunkt und dem GroupIndex 2. Beim Klick in das Memo schalte ich die Eigenschaft Enabled des Hauptmenüpunktes 2 ein bzw. aus. Das von dir beschriebene Phänomen kann ich dabei nicht beobachten. Ich vermute, dass der Fehler an einer anderen Stelle verursacht wird. Grüße vom marabu |
Re: Problem mit MDI Child Fenster und Systemmenü
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo marabu,
danke erst einmal für deine Antwort. Das war natürlich prinzipiell ein guter Tipp das ganze einmal ausserhalb der eigenen (möglicherweise fehlerhaften) Anwendung zu testen. Ich habe also auch bei mir das Beispiel zu MDI-Anwendungen geöffnet (C:\Programme\Borland\Delphi5\Objrepos\Mdiapp\mdia pp.dpr) und im Kindfenster für das OnClick-Ereignis der Memo-Komponente den Menüpunkt Edit1 des Hauptformulars deaktiviert. Und siehe da, dass X (Close) des Systemmenüs wird grau. :cry:
Delphi-Quellcode:
Wichtig ist, dass das Kindfenster maximiert ist. Im Normalen Fensterzustand tritt das ganze nicht auf.
procedure TMDIChild.Memo1Click(Sender: TObject);
begin MainForm.Edit1.Enabled := not MainForm.Edit1.Enabled; end; Sieht also doch so aus, als wenn es sich um einen generellen Bug handelt? :? Aber selbst wenn es ein genereller Bug ist. Wie könnte ich es verhindern bzw. das Close Menü wieder aktivieren. Ich habe es mit folgendem Code versucht:
Delphi-Quellcode:
Aber der scheint keine Auswirkungen auf das Systemmenü des Kindfensters zu haben.
procedure TMDIChild.Button1Click(Sender: TObject);
var MenuHandle: HMenu; begin MenuHandle := GetSystemMenu(Self.Handle,False); EnableMenuItem(MenuHandle,SC_CLOSE,MF_BYCOMMAND and not MF_GRAYED); end; Viele Grüße Ronald |
Re: Problem mit MDI Child Fenster und Systemmenü
Ronald, es bleibt dabei - ich kann das Phänomen nicht nachvollziehen. Weder das vom window manager gemalte border icon, noch das close item im system menu werden deaktiviert. Mein D5 Info-Dialog meldet D5 Enterprise Compilierung 6.18 Update Pack 1. Tut mir sehr leid, aber ich bin etwas ratlos.
marabu |
Re: Problem mit MDI Child Fenster und Systemmenü
Ich hatte das Problem mit Delphi 5 auch (habe inzwischen D2K5) - aber bei mir war das nur ein Anzeigeproblem. Soll heißen: das X ist zwar grau, aber es funktioniert wie gewohnt.
|
Re: Problem mit MDI Child Fenster und Systemmenü
Wilde Vermutung,
hast Du vielleicht im Clientformular eine andere "Bordericons" Einstellung als im Hauptformular. Sonst lade dich mal ein Beispielprojekt hoch um zu sehen, ob es ein Versionsproblem bei Delphi ist. Grüße // Martin |
Re: Problem mit MDI Child Fenster und Systemmenü
Vielen Dank erst einmal für Eure Antworten.
@marabu Meine Info-Dialog zeigt Delphi 5 Professional Version 5.0 Compilierung 6.18 Update Pack 1 an. Auf meinem PC hab ich Windows 2000, aber dieses Verhalten zeigt sich auch unter Windows XP, ist als anscheinend Windowsversion-unabhängig. @Flocke Du hast recht, dass hatte ich noch gar nicht bemerkt, dass das X nur grau ist, aber dennoch funktioniert. Scheint also wohl doch ein Delphi 5 Problem zu sein, da du dieses Verhalten ja auch schon mal hattest. @mschaefer Nein, die Einstellung Bordericons ist bei allen Fenstern gleich. Ich habe mir erst einmal so geholfen. Am Ende meiner Routine, welche den Menüpunkt deaktiviert hatte, wird der Menüpunkt wieder aktiviert und folgende Zeilen ausgeführt:
Delphi-Quellcode:
Durch den Wechsel des Fensterzustandes wird das X wieder schwarz. Das ist zwar alles andere als Elegant, aber momentan fällt mir nichts besseres ein.
if WindowState = wsMaximized then
begin WindowState := wsNormal; WindowState := wsMaximized; end; Viele Grüße Ronald |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz