AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit MDI Child Fenster und Systemmenü

Offene Frage von "RonnyB"
Ein Thema von RonnyB · begonnen am 31. Okt 2005 · letzter Beitrag vom 1. Nov 2005
Antwort Antwort
RonnyB

Registriert seit: 31. Okt 2005
3 Beiträge
 
Delphi 5 Professional
 
#1

Problem mit MDI Child Fenster und Systemmenü

  Alt 31. Okt 2005, 14:47
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem mit MDI Child Fenster und Systemmenü

  Alt 31. Okt 2005, 15:09
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
  Mit Zitat antworten Zitat
RonnyB

Registriert seit: 31. Okt 2005
3 Beiträge
 
Delphi 5 Professional
 
#3

Re: Problem mit MDI Child Fenster und Systemmenü

  Alt 31. Okt 2005, 16:12
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.

Delphi-Quellcode:
procedure TMDIChild.Memo1Click(Sender: TObject);
begin
  MainForm.Edit1.Enabled := not MainForm.Edit1.Enabled;
end;
Wichtig ist, dass das Kindfenster maximiert ist. Im Normalen Fensterzustand tritt das ganze nicht auf.
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:
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;
Aber der scheint keine Auswirkungen auf das Systemmenü des Kindfensters zu haben.


Viele Grüße
Ronald
Miniaturansicht angehängter Grafiken
mdiclose_212.jpg  
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem mit MDI Child Fenster und Systemmenü

  Alt 31. Okt 2005, 16:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Problem mit MDI Child Fenster und Systemmenü

  Alt 31. Okt 2005, 16:42
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#6

Re: Problem mit MDI Child Fenster und Systemmenü

  Alt 31. Okt 2005, 17:04
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
Martin Schaefer
  Mit Zitat antworten Zitat
RonnyB

Registriert seit: 31. Okt 2005
3 Beiträge
 
Delphi 5 Professional
 
#7

Re: Problem mit MDI Child Fenster und Systemmenü

  Alt 1. Nov 2005, 08:49
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:
  if WindowState = wsMaximized then
  begin
    WindowState := wsNormal;
    WindowState := wsMaximized;
  end;
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.

Viele Grüße
Ronald
  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 14:53 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