Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Breite von PopupMenu ermitteln (https://www.delphipraxis.net/155080-breite-von-popupmenu-ermitteln.html)

Codehunter 7. Okt 2010 15:17

Breite von PopupMenu ermitteln
 
Ich möchte mir so ein Quickstart-Menü a la Opera-F12 basteln. Das gehört beim Aufpoppen zentriert auf den Bildschirm. Da ich aber nicht weiß wie hoch und breit das PopupMenu ist krieg ich die Zentrierung nicht exakt hin. Wie kann man die Abmessungen eines PopupMenu vor dem Aufpoppen bestimmen?

Grüße
Cody

uligerhardt 7. Okt 2010 15:44

AW: Breite von PopupMenu ermitteln
 
Du kannst mal schauen, ob du mit
Delphi-Quellcode:
OwnerDraw := True
und
Delphi-Quellcode:
OnMeasureItem
weiterkommst.

sh17 7. Okt 2010 21:21

AW: Breite von PopupMenu ermitteln
 
Das wurde schon mal diskutiert und geht IMO immer noch nicht zufriedenstellend. Die Höhe könntest Du Dir über die Anzahl und Arten der Items errechnen, wobei aber Unterschiede bei den Windows-Versionen zu beachten sind. Für die Breite habe ich keine Lösung die funktioniert.

Codehunter 8. Okt 2010 07:56

AW: Breite von PopupMenu ermitteln
 
Ich bin jetzt auf eine ganz einfache aber nicht wirklich elegante Methode gekommen: Da ich kein Standard-Menü verwende sondern so ein AdvPopupMenu ist die Größe nicht Windows-abhängig. Schnittstellen für die Abmessungen gibts da aber leider auch nicht. Also einfach nen Screenshot gemacht, in der Bildbearbeitung abgemessen und die Werte dann statisch in die Berechnung aufgenommen.

Wie gesagt, nicht elegant aber funktionieren tuts. Ich bin spaßeshalber mal in die tieferen Codeschichten beim Menü eingestiegen und habe tatsächlich nichts gefunden was eine Vorabberechnung der Größe ermöglichen würde. Windows generiert die Items dynamisch sobald die Anweisung kommt das Menü darzustellen. Ab dem Zeitpunkt ist die Geschichte ein Selbstläufer bis es auf dem Bildschirm erscheint. Offenbar gibts keine Callback-Schnittstellen o.Ä. um in die Abläufe einzugreifen.


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