Einzelnen Beitrag anzeigen

brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#1

GDI / Canvas / gedrehter Text zentriert ausgeben

  Alt 30. Jan 2009, 12:57
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?
  Mit Zitat antworten Zitat