Punkte konvertieren

Koordinatensysteme; Clientbereichskoordinaten und Bildschirmkoordinaten



Punkte konvertieren
Sie verwenden beim Zeichnen von Grafiken auf Ihrem Formular ein Koordinatensystem, dessen
Ursprung die obere linke Ecke des Clientbereichs ist. Diese Koordinaten werden
als Clientbereichskoordinaten bezeichnet. Bei der Position des
Formulars im Verhältnis zum Bildschirm gibt es auch ein anderes
Koordinatensystem. Dieses Koordinatensystem ist relativ zur oberen
linken Bildschirmecke, und die Koordinaten dieses Systems werden als
Bildschirmkoordinaten bezeichnet. Die Desktopkoordinaten stimmen häufig mit den
Bildschirmkoordinaten überein, allerdings nur dann, wenn sich die Taskleiste
nicht am linken oder oberen Bildschirmrand befindet. Die Formularkoordinaten
schließlich werden relativ zur oberen linken Ecke des Formulars angegeben, bei
der es sich üblicherweise um den Eckpunkt des Formularrahmens handelt, über den
die Größe verändert werden kann.
Die Eigenschaft Location gibt den Bildschirmkoordinatenpunkt an, der bei den
Formularkoordinaten dem Punkt (0, 0) entspricht. Auf diese Weise kann eine
Anwendung eine Konvertierung zwischen den Punkten dieser beiden
Koordinatensysteme durchführen. Symbolisch sieht dies folgendermaßen aus:
xscreen = xform

yscreen = yform + Location.Y
ähnlich gestattet die Formulareigenschaft DesktopLocation einem Programm die
Konvertierung zwischen Desktop- und Formularkoordinaten:
xdesktop = xform + DesktopLocation.X

ydesktop = yform + DesktopLocation.Y
Mit einer einfachen mathematischen Operation können Sie auch eine Konvertierung
zwischen
Desktop- und Bildschirmkoordinaten durchführen:
xdesktop = xscreen + DesktopLocation.X - Location.X ydesktop = yscreen +
DesktopLocation. Y - Location. Y
ähnliche Form-Eigenschaften zur Konvertierung zwischen Clientbereichskoordinaten
und den drei weiteren Koordinatensystemen gibt es nicht. Es ist möglich,
mithilfe der Eigenschaft CaptionHeight der Klasse Systeminformation die Höhe der
Standardtitelleiste und anschließend die Breite des Formularrahmens zu
ermitteln, indem der ClientSize-Wert mit dem Wert von Size (Gesamtgröße des
Formulars abzüglich der Höhe der Titelleiste) verglichen wird, aber dies wäre
recht aufwendig.
Glücklicherweise enthält die Klasse Form zwei Methoden, mit denen eine direkte
Konvertierung zwischen Bildschirm- und Clientbereichskoordinaten vorgenommen
werden kann:

Form-Methoden (Auswahl) Methode


Function PointToClient(ByVal
ptScreen As Point) As
PointKonvertiert Bildschirm- in
Clientbereichskoordinaten


Function PointToScreen(ByVal
ptdient As Point) As
PointKonvertiert Clientbereichs- in
Bildschirmkoordinaten


Das als Methodenargument übergebene Point-Objekt bleibt unverändert; die
Methoden geben ein Pom-Objekt zurück, das die konvertierten Punkte enthält.
Dieser Aufruf beispielsweise:
Point pt = PointToScreen(Point.Empty)
gibt die Position der oberen linken Ecke des Clientbereichs in Form von
Bildschirmkoordinaten zurück.
Die Klasse Form unterstützt zusätzliche Konvertierungsmethoden, die anstelle von
Point-Objekten Rectangle-Objekte verwenden:
Form-Methoden (Auswahl)

Function RectangleToClient(ByVal
rectScreen As Rectangle)
As RectangleKonvertiert Bildschirm- in
Clientbereichskoordinaten

Function RectangleToScreen(ByVal
rectClient As Rectangle)
As RectangleKonvertiert Clientbereichs- in Bildschirmkoordinaten
Diese Methoden bieten keine Informationen, die über die von PointToClient und
PointToScreen hinausgehen, da die Size-Eigenschaft des Rectangle-Objekts von der
Konvertierung unberührt bleibt.