Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Delphi PopupMenü mit linker Maustaste an richtiger Stelle öffnen? (https://www.delphipraxis.net/177922-popupmenue-mit-linker-maustaste-richtiger-stelle-oeffnen.html)

AlexII 5. Dez 2013 18:25


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:
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;
Aber irgendwie wird das PopupMenü trotzdem weit links geöffnet. Ich verstehe nicht wieso... wer kann mir da weiter helfen?

Danke!

Sir Rufo 5. Dez 2013 18:35

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:
Self
ersetzen und wird dann immer richtig sein.

Ach ja, lass doch mal das Left und Top von der Form aus der Berechnung weg.

AlexII 5. Dez 2013 18:41

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...

himitsu 5. Dez 2013 18:53

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.Delphi-Referenz durchsuchenClientToScreen

AlexII 5. Dez 2013 19:15

AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
 
Zitat:

Zitat von himitsu (Beitrag 1238690)
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

Hat den ClientWidth eine Breite? Wie komme ich auf sie?

Sir Rufo 5. Dez 2013 20:44

AW: PopupMenü mit linker Maustaste an richtiger Stelle öffnen?
 
Zitat:

Zitat von AlexII (Beitrag 1238692)
Zitat:

Zitat von himitsu (Beitrag 1238690)
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

Hat den ClientWidth eine Breite? Wie komme ich auf sie?

:shock: nee, oder?

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)

SirThornberry 6. Dez 2013 10:05

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.

himitsu 6. Dez 2013 10:30

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.

AlexII 6. Dez 2013 10:34

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);

jaenicke 6. Dez 2013 10:39

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 02:20 Uhr.
Seite 1 von 2  1 2      

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