Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text in Bogenform anzeigen lassen (https://www.delphipraxis.net/112365-text-bogenform-anzeigen-lassen.html)

Helmi 19. Apr 2008 19:24


Text in Bogenform anzeigen lassen
 
Hallo,

weiss jemand, wie man einen Text in Bogenform anzeigen lassen kann?

Kennt vielleicht jemand eine Komponente?

lbccaleb 19. Apr 2008 19:33

Re: Text in Bogenform anzeigen lassen
 
ich glaub in den jedis ist da was für dich dabei, bin mir aber nicht 100%ig sicher...

Helmi 19. Apr 2008 19:37

Re: Text in Bogenform anzeigen lassen
 
Danke!

Aber es muss auch ohne den Jedis gehen...

Helmi 20. Apr 2008 16:27

Re: Text in Bogenform anzeigen lassen
 
*push*

Jakob Ullmann 20. Apr 2008 16:35

Re: Text in Bogenform anzeigen lassen
 
Dann kannst du dich gleich damit beschäftigen, wie man eine Grafik dreht. :wink: Tipp: sin() und cos()

bitsetter 20. Apr 2008 17:26

Re: Text in Bogenform anzeigen lassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

auf diese Seite wird mit Hilfe der Prozeduren MyTextOut() und CircleText() Text in Bogenform ausgegeben.

Helmi 20. Apr 2008 17:40

Re: Text in Bogenform anzeigen lassen
 
Hallo,

Danke für den Tip!

Ich hab den mal rauskopiert und etwas formatiert:

Delphi-Quellcode:
procedure MyTextOut(Ca:TCanvas; X, Y, Angle:Integer; Text:String);
var
  lf:  TLogFont;

begin
  with Ca do
    begin
      GetObject(Font.Handle, sizeof(lf), @lf);
      lf.lfEscapement := Angle * 10;

      Font.Handle := CreateFontIndirect(lf);
      TextOut(X, Y, Text);

      lf.lfEscapement  := 0;
      lf.lfOrientation := 0;

      Font.Handle := CreateFontIndirect(lf);
    end;
end;

procedure CircleText(Ca:TCanvas; X0, Y0, RX, RY, BeginAngle, EndAngle: Integer;
  Text: WideString);
const
  aq = 180/3.1415926;
  qa = 3.1415926/180;

  procedure _CircleAlpha(Ca:TCanvas; X0, Y0, RX, RY, Angle:Integer;
    Alpha: WideChar);
  var
    x, y: Integer;
    tw: Double;
  begin
    tw := Ca.TextWidth(Alpha) / 2;
    x  := Round(Cos((Angle - 90) * qa) * tw) + X0;
    y  := Round(Sin((Angle - 90) * qa) * tw) + Y0;
    x  := Round(Cos(Angle * qa) * RX) + x;
    y  := Round(Sin(Angle * qa) * RY) + y;
    MyTextOut(Ca, x, y, 270 - Angle, Alpha);
  end;
var
  Angle, Step: Double;
  n: Integer;

begin
  Step := (EndAngle - BeginAngle) / Length(Text);
  Angle := BeginAngle;
  for n := 1 to Length(Text) do
    begin
      _CircleAlpha(Ca, X0, Y0, RX, RY, Round(Angle), Text[n]);
      Angle := Angle + Step;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Font.Name := '??';
  Canvas.Font.Color := clBlue;
  Canvas.Font.Size := 14;
  CircleText(Canvas, 200, 200, 150, 150, 150, 390, 'Delphi Praxis');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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