AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi GDI / Canvas / gedrehter Text zentriert ausgeben
Thema durchsuchen
Ansicht
Themen-Optionen

GDI / Canvas / gedrehter Text zentriert ausgeben

Ein Thema von brechi · begonnen am 30. Jan 2009 · letzter Beitrag vom 1. Feb 2009
Antwort Antwort
brechi

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

GDI / Canvas / gedrehter Text zentriert ausgeben

  Alt 30. Jan 2009, 11: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#2

Re: GDI / Canvas / gedrehter Text zentriert ausgeben

  Alt 30. Jan 2009, 12:12
Dann mußt du wohl über die Winkelfunktionen (Sin+Cos) deinen Startpunkt mitdrehen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: GDI / Canvas / gedrehter Text zentriert ausgeben

  Alt 1. Feb 2009, 00:04
Und wenn du nicht ganz so fit damit seit solltest, habe ich mal was kurz gezeichnet.

Der Winkel und die Textlänge in der waagerechten ist ja bekannt.
Der Sin(Alpha) ist Gegenkathete/Hypotenuse und an einem "Dreieck Mittelpunkt" - "Gedrehter Textende" - "Rechterwinkel dazu" (das grüne in der Grafik) ist die hälfte der Textlänge die Hypotenuse. Somit kann dann mit dem Sinus die Gegenkathete und damit die gedrehte Texthöhe berechnet werden.
Im gleichen Dreieck berechnet der Kosinus das Verhältnis zwischen Ankathete und Hypotenuse. Damit kann man dann die gedrehte Textlänge ermitteln.

Dann beides halbieren und zum Ursprung addieren fertig. Und standardmäßig benutzen die trigonometrischen Funktionen das Bogenmaß. Mit DegToRad kann dann ein Winkel (°) in Bogenmaß umgerechnet werden.

MfG
xZise
Angehängte Dateien
Dateityp: txt sinecosine_163.txt (4,7 KB, 45x aufgerufen)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:52 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