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:
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;
Frage: Wie macht man es richtig?
Edit:
SetTextAlign liefert mir jetzt die horizontale Mitte, wie vertikal?