![]() |
GDI / Canvas / gedrehter Text zentriert ausgeben
Siehe Topic.
Ich möchte einen Text drehen (Canvas.Orientation, bzw via TLogFont + Escapement) und diesen zentriert an einem Punkt ausgeben. (TextOut) Bei Textout wird ja die obere linke Koordinate vom Text angegeben. Normalerweise würd ich mittels TextExtend die Breite/Höhe ermitteln und dann die Hälfte jeweils abziehen. Aber TextExtend arbeitet auf dem noch nicht umgedrehten Text. Beispiel: Text: "DelphiPraxis" Drehung: 90° (Orientation = 900) Position: 100/100 Ausgabe gedrehter TExt wobei das i/P von DelphiPraxis in der Mitte ist Problem: TextExtend liefert mir als Breite immer noch die Breite vom ungedrehten Text (z.B 12) wobei die Höge dann noch 1 ist. Durch die Drehung von 90° müsste es ja umgekehrt sein. Simples Beispiel:
Delphi-Quellcode:
Frage: Wie macht man es richtig? :)
var
x, y: Integer; s: string; size: TSize; begin x := 100; y := 100; s := 'test_test'; Canvas.Font.Orientation := 90 * 10; // 90° size := Canvas.TextExtent(s); // bezieht sich nicht auf gedrehten Text Canvas.TextOut(x - size.cx div 2, y - size.cy div 2, s); Canvas.Pixels[x, y] := clRed; // nur zum schauen ob es richtig ist end; Edit: SetTextAlign liefert mir jetzt die horizontale Mitte, wie vertikal? |
Re: GDI / Canvas / gedrehter Text zentriert ausgeben
Dann mußt du wohl über die Winkelfunktionen (Sin+Cos) deinen Startpunkt mitdrehen.
|
Re: GDI / Canvas / gedrehter Text zentriert ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
Und wenn du nicht ganz so fit damit seit solltest, habe ich mal was kurz gezeichnet.
Der Winkel und die Textlänge in der waagerechten ist ja bekannt. Der Sin(Alpha) ist Gegenkathete/Hypotenuse und an einem "Dreieck Mittelpunkt" - "Gedrehter Textende" - "Rechterwinkel dazu" (das grüne in der Grafik) ist die hälfte der Textlänge die Hypotenuse. Somit kann dann mit dem Sinus die Gegenkathete und damit die gedrehte Texthöhe berechnet werden. Im gleichen Dreieck berechnet der Kosinus das Verhältnis zwischen Ankathete und Hypotenuse. Damit kann man dann die gedrehte Textlänge ermitteln. Dann beides halbieren und zum Ursprung addieren fertig. Und standardmäßig benutzen die trigonometrischen Funktionen das Bogenmaß. Mit DegToRad kann dann ein Winkel (°) in Bogenmaß umgerechnet werden. MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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