AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Text um Kreis schreiben in FMX

Ein Thema von zeras · begonnen am 30. Mai 2015 · letzter Beitrag vom 31. Mai 2015
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.638 Beiträge
 
Delphi 12 Athens
 
#1

Text um Kreis schreiben in FMX

  Alt 30. Mai 2015, 11:59
Gibt es eine Komponente in XE5, einen Text um einen Kreis zu schreiben?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (30. Mai 2015 um 12:08 Uhr)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: Text um Kreis schreiben

  Alt 30. Mai 2015, 12:05
damit geht auch ein Kreis(abschnitt)

https://www.tmssoftware.com/site/advfancylabel.asp
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.638 Beiträge
 
Delphi 12 Athens
 
#3

AW: Text um Kreis schreiben

  Alt 30. Mai 2015, 12:10
Danke für die Info.
Ich hatte leider vergessen, dass ich das für FMX brauche. Ich habe zwar das Componentpack, aber das angefragte gibt es nur unter VCL. Jedenfalls habe ich das nur unter VCL gefunden, wobei ich nicht die letzte Version von TMS habe.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Text um Kreis schreiben in FMX

  Alt 31. Mai 2015, 19:45
Mir ist da leider keine Funktion bekannt, die das direkt anbietet (wie etwa DrawTextOnPath in anderen Entwicklungsumgebungen, dann hätte man das mit einer TPath-Komponente (Formen) lösen können).

Unter FMX ist das aber letztlich gar kein Problem, da man ja alle Textelemente rotieren und somit diese einfach ausrichten kann.

Für die von Dir benötigte Problemlösung habe ich mal quick and dirty etwas zusammengebastelt, wie man die Aufgabe lösen könnte. Hier erzeuge ich einfach für jeden einzelnen Buchstaben ein TLabel, das ich dann abhängig von der Position am Rand im entsprechenden Rotationswinkel anordne.

Du kannst mit den Werten für Winkel und (Text) Abstand ein wenig spielen, um zu sehen, wie sich das Ergebnis auswirkt. Wenn Du das ganze als Bitmap benötigen solltest, erhältst Du das mit der MakeScreenshot-Funktion. Hier der kurze Quelltext:

Delphi-Quellcode:
procedure TForm14.Button1Click(Sender: TObject);
var
  L: Integer;
  s: string;
  tl: TLabel;
  x, y, lh, centerx, centery: Extended;
  radians: extended;
  MyRotationAngle, textw: Extended;

  bm: TBitmap;
begin
  // Labels entfernen, falls da
  if Circle1.Children <> NIL then begin
    for L := Circle1.Children.Count-1 downto 0 do
      Circle1.Children[L].free;
  end;

  centerx := circle1.Width /2;
  centery := circle1.Height / 2;
  MyRotationAngle := Winkel.Value;

  for L := 1 to length (edit1.Text) do begin
    s := copy (edit1.Text, L, 1);

    textw := canvas.TextWidth(s) + Abstand.Value; // Textbreite Buchstabe

    lh := (circle1.Height / 2) + canvas.TextHeight(s);

    tl := tLabel.Create(Circle1);
    tl.Parent := Circle1;
    tl.Visible := True;
    tl.Text := s;
    tl.AutoSize := True;

    tl.RotationCenter.x := 0;
    tl.RotationCenter.y := 0;

    // Punkt auf Kreisrand berechnen
    radians := (MyRotationAngle - 90) * pi / 180;
    x := lh + lh * cos(radians);
    y := lh + lh * sin(radians);

    tl.Position.X := x + CenterX - lh;// - tl.Height;
    tl.Position.Y := y + CenterY - lh;// - tl.Height;

    tl.RotationAngle := MyRotationAngle;

    MyRotationAngle := MyRotationAngle + textw;
  end;

  (* Falls als Bitmap benötigt:
  bm := TBitmap.Create;
  bm := LayoutCopy.MakeScreenshot;
  //bm.SaveToFile('D:\TT.png');
  *)

end;
Anliegend der Source-Code (mit XE8 entwickelt, ist aber auch für frühere Versionen nutzbar) und 2 Screenshots (Hinweis: 2. Bild ist ein PNG mit Alphakanal, wird evtl. nicht in jedem Browser in der Vorschau richtig angezeigt).
Miniaturansicht angehängter Grafiken
drawcircle-prog.jpg   tt.png  
Angehängte Dateien
Dateityp: zip CircleTextDraw.zip (7,1 KB, 6x aufgerufen)

Geändert von Harry Stahl (31. Mai 2015 um 19:52 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.173 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Text um Kreis schreiben in FMX

  Alt 31. Mai 2015, 20:04
Ist das nicht genau was auf der Seite FireMonkey Layouts Strategies steht?
Zitat:
For example, an easy way to obtain a circular distribution of controls is to set the initial location for a TLayout with the controls inside, and then copy and paste the positioned layouts, keeping the same location and changing the RotationAngle.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Text um Kreis schreiben in FMX

  Alt 31. Mai 2015, 20:57
Ist das nicht genau was auf der Seite FireMonkey Layouts Strategies steht?
Zitat:
For example, an easy way to obtain a circular distribution of controls is to set the initial location for a TLayout with the controls inside, and then copy and paste the positioned layouts, keeping the same location and changing the RotationAngle.
Nein, "genau was da steht" ist es nicht (wobei es nicht schaden kann, sich das und die weiterführenden Seiten einmal durchzulesen). Dort geht es in erster Linie darum, wie man zur Design-Zeit Controls anordnen kann. Ich bin davon ausgegangen, dass die Aufgabe "Text" um Kreis schreiben" sich auf eine Runtime-Problematik bezog.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.638 Beiträge
 
Delphi 12 Athens
 
#7

AW: Text um Kreis schreiben in FMX

  Alt 31. Mai 2015, 22:11
Danke für die Quelle.
Ich werde mal sehen, wie ich das in mein Projekt einbauen kann.
Aber bezahlen kann ich die "Sonntagsarbeit" nicht.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz