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/)
-   -   C# Position von ContextMenu (https://www.delphipraxis.net/43936-position-von-contextmenu.html)

MathiasSimmack 10. Apr 2005 22:44


Position von ContextMenu
 
Ganz kurze Frage: Ich habe eine Ereignisfunktion für einen speziellen Tree-View, der mir den angeklickten Knoten und die Koordinaten liefert. Lasse ich das Popupmenü bei den gelieferten Koordinaten mit Delphi anzeigen, erscheint es exakt am Mauscursor. So wie es soll. Bei CSharp heißt es aber, dass das ContextMenu bzw. die Koordinaten relativ zum Control (1. Parameter) gelten:
Code:
Point p = new Point(e.x, e.y);
printPopup.Show(this, p);
Und damit sitzt mein Popupmenü leider ein Stück zu tief. :( Gibt´s so was wie "ClientToScreen" (API) auch im .NET Framework? Ich denke, ich muss anstelle von this entweder das Desktop-Control bzw. -Handle angeben (:gruebel:), oder ich muss die Koordinaten eben relativ zum Desktop umwandeln.

kiar 10. Apr 2005 22:54

Re: Position von ContextMenu
 
hallo mathias. das aus meiner d2005 hilfe
Zitat:


TControl.ScreenToClient Methode

Wandelt die Bildschirmkoordinaten eines bestimmten Punktes in Client-Koordinaten um.
Klasse
TControl

Syntax


[Delphi] public function ScreenToClient(const Point: TPoint): TPoint;


Beschreibung
Mit ScreenToClient können Sie die Bildschirmkoordinaten eines Punktes in lokale bzw. Client-Koordinaten umwandeln. In Client-Koordinaten bezeichnet (0, 0) die linke obere Ecke des Client-Bereichs des Steuerelements. In Bildschirmkoordinaten entspricht (0, 0) der linken oberen Ecke des Bildschirms.

Mit den Methoden ScreenToClient und ScreenToClient können Sie Konvertierungen zwischen den Koordinatensystemen verschiedener Steuerelemente durchführen. Ein Beispiel:

[Delphi] P := TargetControl.ScreenToClient(SourceControl.ClientT oScreen(P));
Im folgenden Beispiel werden die Koordinaten des Punktes P vom Koordinatensystem der Komponente SourceControl in das System des Steuerelements TargetControl umgewandelt:


wohlgemerkt als net referenz

raik

edit // sage nicht du brauchst es anderst herum :mrgreen:
edit2 // da scheint delphi bloss die winapi irgenndwie integriert zu haben :cry:

MathiasSimmack 10. Apr 2005 23:10

Re: Position von ContextMenu
 
Nee, das ist kein echtes .NET. ;) Guck mal das T vor TControl. Ich habe gerade die Suche vom .NET Framework SDK gequält. Da ist in der Hinsicht nichts zu finden. :(

MathiasSimmack 11. Apr 2005 10:19

Re: Position von ContextMenu
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab´s jetzt mal mit
Code:
printPopup.Show(this.TopLevelControl, p);
probiert. Damit ist es zwar immer noch ein Stückchen weg, aber immerhin dichter dran als noch zuvor. :lol: Der Zwischenraum entspricht, wenn ich das richtig sehe, genau einem Eintrag im Tree-View. Tja, wenn mir einer helfen könnte, diese Lücke noch zu entfernen ...

MathiasSimmack 11. Apr 2005 11:23

Re: Position von ContextMenu
 
Ahhhhh, "PointToScreen" und "PointToClient" heißt das im Framework :roll:
Code:
Point p = new Point(e.x, e.y);
p      = this.PointToClient(p);
printPopup.Show(this, p);
Und voilà: das Menü erscheint beim Cursor.


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