AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung FMX: Menu of MainMenu pops up sometimes on a wrong screen

FMX: Menu of MainMenu pops up sometimes on a wrong screen

Ein Thema von Harry Stahl · begonnen am 3. Jun 2020
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
1.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

FMX: Menu of MainMenu pops up sometimes on a wrong screen

  Alt 3. Jun 2020, 19:38
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?

Geändert von Harry Stahl ( 3. Jun 2020 um 23:40 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf