AGB  ·  Datenschutz  ·  Impressum  







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

MDI-Minimized-Problem

Ein Thema von Incocnito · begonnen am 21. Mär 2022 · letzter Beitrag vom 22. Mär 2022
Antwort Antwort
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#1

MDI-Minimized-Problem

  Alt 21. Mär 2022, 16:30
Moin zusammen,

ich habe hier in der Firma das Problem, das das Hauptmenü auf mal nach rechts springt.
Nach gefühlten 9 Jahrhunderten Forschung habe ich es nun relativ weit eingrenzen können.

Es passiert, wenn
A) für das Hauptmenü die Eigenschaft "OwnerDraw" gesetzt ist
B) das Hauptfenster ein MDI-Fenster ist
C) ein MDI-Child-Fenster im Status Maximized (ohne BorderIcon "biMinimized") erzeugt wird
und dann
D) (im MDI-Fenster per Buttonclick) die Caption eines Menüeintrags im Hauptfenster geändert wird.

Genutzt wird Delphi 10.4 Update 2 (mit diversen Tools).

Kann mal jemand Testen, ob das jemand ebenfalls nachstelen kann?

Ich habe die zusammengestauchte Version des Programms mal mit angehangen. Damit konnte ich das nachstellen.
(Dazu im Hauptfenster auf "Hier starten" klicken und anschließend auf den Test-Button.)

Falls jetzt jemanden auffällt "das kann so ja auch gar nicht gehen, das Programm macht genau was es soll",
wäre ich für jeden Hinweis dankbar. Ein MDI-Fenster maximiert starten finde ich generell wohl für sinnvoll und das Aktualisieren der Captions der Menüeinträge ist auch wohl notwendig ("do not change some alten Quelltext" sag ich mal).

Note: Im Original wird OnMesureItem übrigens gesetzt und verwendet, war aber für den Test irrelevant.

Vielen Dank schonmal für die Zeit!

Mit freundlichem Gruß
Incocnito
Angehängte Dateien
Dateityp: zip VCL_Test.zip (6,7 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: MDI-Minimized-Problem

  Alt 21. Mär 2022, 17:23
Das Problem ist, dass dabei das Neuerstellen der Menüs aufgerufen wird. Und das geht dann maximiert offenbar schief.

Man kann das spezielle Problem patchen indem man die Methode TMenuItem.MenuChanged aus Vcl.Menus auf eine eigene Methode umleitet und dort die Originalmethode mit False als Parameter aufruft. Die Frage ist, was das für Folgen hat, wenn man das Neuerstellen der Menüs deaktiviert.

Das Problem ist, dass MDI als Technik seit fast 30 Jahren nicht mehr empfohlen und seit 20 Jahren als veraltet markiert ist und es von Microsoft keine Bugfixes oder Unterstützung dafür mehr gibt. Unter Windows 10 haben die Probleme noch einmal deutlich zugenommen.

Abseits der Umleitung virtueller Methoden gibt es nur die Billigvariante, die dir sicher auch schon eingefallen ist:
Delphi-Quellcode:
    WindowState := wsNormal;
    FItem.Caption := 'Neuer Text';
    WindowState := wsMaximized;
Allgemein macht es natürlich Sinn ein Ticket bei Embarcadero aufzumachen. Ich würde allerdings aufgrund des Warnhinweises in der Doku vermuten, dass du damit wenig erreichen wirst:
Zitat:
The Per Monitor V2 (and many of the other High-DPI features in Windows) have no support for the MDI child windows model. Microsoft has stopped addressing bugs reported for MDI, and we recommend migrating to a different multi-windows model (multiple floating windows, docked panes, tabbed windows, etc.)
Quelle

Persönlich kann ich nur dazu raten MDI so schnell wie möglich zu entfernen bevor es noch massivere Probleme damit gibt oder Microsoft es am Ende wirklich ganz entfernt...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#3

AW: MDI-Minimized-Problem

  Alt 22. Mär 2022, 08:52
Moin!

Äh, oha ... ich habe das mal weiter gegeben, dass MDI nicht mehr genutzt werden sollte.
Das könnte wohl etwas Zeit für eine Umstellung des kompletten Programms bedeuten.

Tatsächlich kam das im Programm dadurch zu stande, dass Fenster A maximiert war und Fenster B beim Schließen den Text des Hauptmenüs geändert hat. Da wird das mit
Delphi-Quellcode:
    WindowState := wsNormal;
    FItem.Caption := 'Neuer Text';
    WindowState := wsMaximized;
eeeetwas umständlich 😂

Ja, auf jeden Fall vielen lieben Dank für den Hinweis. Ich meine, ist ja schon eine etwas schwierig zu produzierende Problematik "kommt beim Kunden ab und zu vor" und dann danach suchen "was haben die denn jetzt gemacht?" und "was davon war jetzt schuld daran?" 😂 Kennen ja alle hier.

Mit freundlichem Gruß
Incocnito
  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 12:55 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