Position von MenuItem ermitteln?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1779
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Position von MenuItem ermitteln?

Beitrag von fliegermichl »

Ich habe ein PopupMenu mit sehr vielen Einträgen (100+)
Das ist extrem umständlich zu bedienen.

Jetzt habe ich mir eine TPopupSearchForm gebastelt mit einem Edit zum filtern und einer Listbox mit den Einträgen, welche ich anstelle des Menus anzeigen möchte.

Ich konnte bislang nicht herausfinden, wo der übergeordnete Menüpunkt gezeichnet wird, damit ich diese Form platzieren kann.

Benutzeravatar
Zvoni
Beiträge: 670
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Position von MenuItem ermitteln?

Beitrag von Zvoni »

PopupMenu hat eine PopupPoint-Eigenschaft.
https://lazarus-ccr.sourceforge.io/docs ... point.html

Desweiteren hat das TMenuItem (was ja erst einen Menü-Eintrag selbst darstellt) ein OnMeasureItem-Ereignis
https://lazarus-ccr.sourceforge.io/docs ... eitem.html
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1779
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Position von MenuItem ermitteln?

Beitrag von fliegermichl »

Zvoni hat geschrieben: Do 7. Mai 2026, 11:03 PopupMenu hat eine PopupPoint-Eigenschaft.
https://lazarus-ccr.sourceforge.io/docs ... point.html

Desweiteren hat das TMenuItem (was ja erst einen Menü-Eintrag selbst darstellt) ein OnMeasureItem-Ereignis
https://lazarus-ccr.sourceforge.io/docs ... eitem.html
Mein MenuItem ist ja ein Untermenü von dem Popupmenü. Von dem her ist der PopupPoint die falsche Position.
OnMeasureItem gibt mir die Breite und die Höhe des MenuItems aber nicht die Position am Bildschirm wo es gezeigt wurde/wird.

Ich nehme jetzt einfach die Position vom Mauszeiger.
Das geht auch einigermassen.

Benutzeravatar
Zvoni
Beiträge: 670
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Position von MenuItem ermitteln?

Beitrag von Zvoni »

fliegermichl hat geschrieben: Do 7. Mai 2026, 11:36
Zvoni hat geschrieben: Do 7. Mai 2026, 11:03 PopupMenu hat eine PopupPoint-Eigenschaft.
https://lazarus-ccr.sourceforge.io/docs ... point.html

Desweiteren hat das TMenuItem (was ja erst einen Menü-Eintrag selbst darstellt) ein OnMeasureItem-Ereignis
https://lazarus-ccr.sourceforge.io/docs ... eitem.html
Mein MenuItem ist ja ein Untermenü von dem Popupmenü. Von dem her ist der PopupPoint die falsche Position.
OnMeasureItem gibt mir die Breite und die Höhe des MenuItems aber nicht die Position am Bildschirm wo es gezeigt wurde/wird.

Ich nehme jetzt einfach die Position vom Mauszeiger.
Das geht auch einigermassen.
PopupPoint ist die Position wo das Popup-Menü selbst "auftauchen" würde (wahrscheinlich linke obere Ecke des Popups. Nicht sicher)
MeasureItem gibt dir die Höhen und Breite der TMenuItems.
PopupPoint.Y + Z * ItemHöhe ergibt die Koordinate der linken oberen Ecke deines MenuItems (Z = Anzahl menuItems untereinander bis zu deinem Item)
PopupPoint.X + ItemBreite --> Ergibt dann was?

im Prinzip einfach durchhangeln, und vom PopupPoint aus zu x und y dazuaddieren.

Wie sieht denn dein Popmenü denn aus?
bzw. bis wohin müsste man sich durchhangeln?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten