Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Label auf QuickRep um 90° drehen

  Alt 22. Aug 2005, 20:34
Zitat:
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...).

Delphi-Quellcode:
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 'Textdrehungin 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.
ORIGINAL AUS DEM EDH!
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat