Home » Tipps & Tricks » Grafik » Zeichnen » Gedrehten Text ausgeben

Gedrehten Text ausgeben

Mit dem TCanvas-Objekt kann man normalerweise keinen gedrehten Text ausgeben. In Verbindung mit TLogFont ist dies aber dennoch möglich.

Folgende Prozedur erwartet ein TCanvas-Objekt, die Koordinaten des linken, oberen Punktes des Textes (es von einem horizontalen Text ausgegangen), den Text selbst als String und den Grad der Drehung (z.B. 0=horizontal, 450=diagonal, 900=senkrecht, 1800=kopfüber…).

procedure TextOutAngle(const Canvas: TCanvas; X, Y: Integer; const AText: string; AAngle: Integer);
var
  hCurFont: HFONT;
  LogFont: TLogFont;
begin
  with Canvas do
  begin
    hCurFont := Font.Handle;
    try
      GetObject(Font.Handle, SizeOf(LogFont), @LogFont);
      LogFont.lfEscapement := AAngle;
      LogFont.lfOrientation := AAngle;
  
      Font.Handle: = CreateFontIndirect(LogFont);
      try
        TextOut(X, Y, AText);
      finally
        DeleteObject(Font.Handle);        
      end;
    finally
      Font.Handle := hCurFont;
    end;
  end;
end;

Folgendes Beispiel gibt in einer TPaintbox (Ereignis OnPaint) den Text ‚Textdrehung‘ in einem 45°-Winkel aus:

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  Paintbox1.Canvas.Font.Name:='Arial';
  Paintbox1.Canvas.Font.Size:=24;
  TextOutAngle(Paintbox1.Canvas, 10, 90, 'Textdrehung', 450);
end;

Es werden die Schrifteinstellungen des übergebenen Canvas-Objekt übernommen. Für Drehungen können nur TrueType-Schriftarten verwendet werden.

Möchten Sie mehrere gedrehte Texte ausgeben, wird bei jedem Aufruf von TextOutAngle ein neuer Font erzeugt. Sie können die Ausgabe beschleunigen, wenn Sie nach einmaliger Erzeugung des Fonts die gewünschten Texte ausgeben. Orientieren Sie sich dabei an der Prozedur TextOutAngle.