Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   FMX: Menu of MainMenu pops up sometimes on a wrong screen (https://www.delphipraxis.net/204528-fmx-menu-mainmenu-pops-up-sometimes-wrong-screen.html)

Harry Stahl 3. Jun 2020 20:38


FMX: Menu of MainMenu pops up sometimes on a wrong screen
 
Dieser Bug ist leider auch in 10.4 noch offen:

https://quality.embarcadero.com/brow...1871?filter=-2

Ich habe mal versucht es selbst zu fixen, komme da aber nicht so recht weiter (Hinweis: Problem nur bei Anwendungen mit Styles). Problem tritt bei Multimonitor-System auf, wenn die Hauptform auf dem linken Monitor mit einem Minus-Offset liegt oder auf dem rechten, mit einem entsprechenden zusätzlichen positiven Offset.

Bislang habe ich herausgefunden, dass das aufklappen des Popupmenues der Mainform über einen Timer-Event in der FMX.Menus-Datei getriggert wird.

In FMX.Menus in der procedure "TMenuItem.Popup;" wird eine TPopupOfMenu erzeugt und dann per PopUp.Popup zur Anzeige gebracht. Dazu wird in procedure TPopup.Popup (unit FMX.controls) eine TCustomPopupForm erzeugt und mit verschiedenen Werten belegt.

Die TucstomPopUpForm Form hat Anfangs richtigerweise für left den negativen Wert, aber durch UpdatePopupsize werden die Werte für left und top auf jeweils -8 verändert, so dass das PopUpMenü auf dem mittleren Bildschirm in der linken oberen Ecke erscheint.

Aber selbst wenn ich die Procedure ergänze und mir die Ursprungswerte merke und am Ende wiederherstelle, wird das PupUp-Menü nur ganz kurz an der richtigen Stelle angezeigt und dann aber sofort wieder an der falschen.

Da muss also irgendwo nach der ersten Anzeige hinterher ein Update erfolgen mit falschen Werten.

Die Anzeige überhaupt erfolgt erst nach dem Bfehl Popup.PopUp in (procedure TMenuItem.Popup):

Delphi-Quellcode:
Popup.Popup;
if FMenuService <> nil then
        FMenuService.StartMenuLoop(Menu);
StartMenuLoop wird also dynamisch zur Laufzweit zugewiesen, da kommt man nur rein, wenn man das mit dem Debugger verfolgt.

Man landet dann in "TMenuLooperWin.StartLoop" (unit FMX.Platform.win), aber da finde ich nichts, was mir weiterhelfen könnte. Momentan gelingt es mir leider nicht rauszufinden, wo der Hase im Pfeffer liegt.

Hat jemand eine Idee oder evtl. das Problem schon für sich gelöst und kann einen Hinweis geben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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