![]() |
PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Hallo,
ich möchte ein PopupMenü mit der linken Maustaste, wenn ich auf ein Image klicke, öffnen. Dafür errechne ich wie folgt die Position des PopupMenüs so das es sich genau in der Mitte des Images öffnet auf das ich klicke:
Delphi-Quellcode:
Aber irgendwie wird das PopupMenü trotzdem weit links geöffnet. Ich verstehe nicht wieso... wer kann mir da weiter helfen?
procedure TForm1.MenuImageClick(Sender: TObject);
begin // Menu / Settings Menü aufklappen MenuSettingsPopupMenu.Popup(Form1.Left + Form1.MenuImage.Left + (Form1.MenuImage.Width/2), Form1.Top + Form1.MenuImage.Top + (Form1.MenuImage.Height/2)); end; Danke! |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Warum benutzt du immer dieses
Delphi-Quellcode:
?
Form1
Das kannst du weglassen oder durch
Delphi-Quellcode:
ersetzen und wird dann immer richtig sein.
Self
Ach ja, lass doch mal das Left und Top von der Form aus der Berechnung weg. |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Meinst Du etwa so?
Delphi-Quellcode:
MenuSettingsPopupMenu.Popup(Self.MenuImage.Left + (Self.MenuImage.Width/2), Self.MenuImage.Top + (Self.MenuImage.Height/2));
Bringt auch nichts, das PopupMenü richtet sich trotzdem an die Bildschirmrände... |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Ist dir schonmal aufgefallen, daß eine Form meistens einen Rahmen hat?
Den solltest du auch mit einrechnen. > Darum gibt es z.B. zum Width auch noch das ClientWidth PS: Self. ![]() |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Zitat:
|
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Zitat:
Wenn du einen Begriff nicht verstehst, dann bemühe doch die Dokumentation, oder versuche es mal mit einem Übersetzer ... (das tut echt schon weh - vor allem, weil dir Width anscheinend etwas zu sagen scheint) |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Schaut dir mal die Methode ScreenToClient an. Also zum Beispiel YourImage.ScreenToClient(0,0) gibt dir die Bildschirmkoordinaten der linken oberen Ecke deines Images zurück.
|
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
siehe #4
Aber du meinst bestimmt auch ClientToScreen. Bei ScreenToClient wären die Koordinaten negativ, da es die relativen Koordinaten auf zum Desktop wären, aus Sicht der Komponente. |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
Danke Dir!
Verstehe ich soweit, aber wie kann ich die zwei Methode miteinander verknüpfen, das kapiere ich nicht... :gruebel: Ich habe dann für x und y je zwei Koordinaten... :gruebel:
Delphi-Quellcode:
MenuSettingsPopupMenu.Popup(x, y);
YourImage.ScreenToClient(0,0); |
AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
ScreenToClient bekommt einen TPoint als Parameter, sprich beide Koordinatenwerte auf einmal. Also musst du mit Point(x, y) einen TPoint erstellen und bekommst bei ClientToScreen auch einen solchen zurück. In diesem Rückgabewert stehen die Koordinaten, die du an Popup übergeben musst, denn die beziehen sich auf den Bildschirm, nicht auf dein Fenster.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz