![]() |
DrawText mit 2 Schriftgrößen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
die Funktion DrawText mit zwei Schriftgrößen zu versehen, geht natürlich nicht. Ich habe mal eine Grafik angehängt, um mein Problem zu verdeutlichen. In einem RECT Bereich (graue Fläche) möchte ich zentriert den Beispieltext (TextHB) anzeigen lassen. Die letzten beiden Zeichen (HB) etwas kleiner. Ich habe mal schnell meinen Text geteilt und nutze 2 x DrawText. Die Schrifteigenschaften für DrawText kann man ja zuvor entsprechend setzen. Nur das ganze zentriert anzeigen zu lassen, ist dann doch etwas schwieriger. Dazu müssen die RECT-Werte stimmen. Diese kann man natürlich ändern. Ich kenne auch "Canvas.TextWidth" aber das alles nun zusammen zu basteln, damit das mit DT-Enter funktioniert... Gibt es evtl. für solche Sachen spezielle API-Funktionen, damit ich nicht rechnen muss? :) Heute kann ich eh nicht mehr rechnen *lach Weiterhin hoffe ich ja auf gute Lösungen, damit die Grafikausgabe nicht abgebremst wird. Es geht hier nicht nur um ein Text. Gruß Mike |
AW: DrawText mit 2 Schriftgrößen?
Du musst dir eben die Breite der beiden Texte geben lassen und schon kannst du die nötigen Positionen berechnen. :zwinker:
DT_CALCRECT |
AW: DrawText mit 2 Schriftgrößen?
Hab jetzt gerechnet :)
t1 = Textbreite erster Teil t2 = Textbreite zweiter Teil tt = Speichere mir rect.left Berechnung (für DT_LEFT, also selbst zentrieren): rect.left = tt + (ceil(rect.width/2))-(ceil((t1+t2)/2)); Erster Teil mit DrawText ausgeben, dann Rect.Left mit t1 addieren und zweiten Teil mit neuem DrawText ausgeben. Muss aber mit dem Canvas noch was machen. Um die Textbreiten zu speichern (mit Canvas.TextWidth), nutze ich dasselbe Canvas. Ich muss hier "Font.Size" mal kleiner und mal wieder höher stellen. Auch für DrawText das gleiche Spiel mit Font.Size hin und her. Schönen Sonntag den Lesern P.s. DT_CALCRECT verstehe ich so, dass mir hier mein Rect ggf. geändert wird. Mein Rect (Rahmen) soll sich in der Breite/Höhe nicht ändern. |
AW: DrawText mit 2 Schriftgrößen?
Guck doch nach, wenn du dir nicht sicher bist, was es tut.
Google: DT_CALCRECT ![]() |
AW: DrawText mit 2 Schriftgrößen?
@Luckie
Hatte wohl überlesen, dass mit DT_CALCRECT der Text nicht gezeichnet, sondern nur das LPRECT geändert wird. @Frühlingsrolle Danke für den Code. Kurz mal eingefügt und probiert. Um es noch zu zentrieren, muss ich da wohl auch noch 1x mehr das Canvas.Font abändern. Also so in der Art wie in meinem Code da unten. Aber ich schau noch mal rüber... Finde es nur doof, dass man Font.Size hin und her abändern muss. Gerade habe ich es so:
Delphi-Quellcode:
// strT1,strT2 = String
// T1,T2 = Integer // Textbreite vom ersten Textteil (großer Text) speichern (mit der aktuellen Schriftgröße) T1 := MyControl.Canvas.TextWidth(strT1); // Font kleiner machen MyControl.Canvas.Font.Size := MyControl.Canvas.Font.Size - 4; // Textbreite nun vom zweiten Textteil (kleinerer Text) speichern T2 := MyControl.Canvas.TextWidth(strT2); // Font wieder auf die normale Größe zurücksetzen MyControl.Canvas.Font.Size := MyControl.Canvas.Font.Size + 4; // Linke Position vom Rect für den ersten Textteil ändern (Zentrierung berechnen) Rect.Left := Rect.Left + trunc((Rect.Width/2)-((T1+T2)/2)); // Erster Textteil ausgeben DrawText(MyControl.Canvas.Handle,PWideChar(strT1),-1,Rect,DT_SINGLELINE Or DT_TOP Or DT_Left or DT_NOCLIP); // Font kleiner machen MyControl.Canvas.Font.Size := MyControl.Canvas.Font.Size - 4; // Linke Position vom Rect für den zweiten Textteil ändern // Also Rect.Left von oben + Textbreite vom ersten Textteil Rect.Left := Rect.Left+T1; // Zweiten Textteil aussgeben (erster und zweiter Textteil zusammen ergibt dann die Zentrierung für das Rect.Width) DrawText(MyControl.Canvas.Handle,PWideChar(strT2),-1,Rect,DT_SINGLELINE Or DT_TOP Or DT_Left or DT_NOCLIP); // Font wieder auf die normale Größe zurücksetzen MyControl.Canvas.Font.Size := MyControl.Canvas.Font.Size + 4; |
AW: DrawText mit 2 Schriftgrößen?
Zitat:
Und nicht zu vergessen der Typ der Variablen strT1 und strT2. :zwinker: DrawText = PChar + String DrawTextA = PAnsiChar + AnsiString (der String vor D2009) DrawTextW = PWideChar + WideString bzw. UnicodeString (dar String seit D2009) Ich weiß, PWideChar = PChar seit 11 Jahren und es wird sich so schnell nicht wieder ändern, aber kein Grund es nicht dennoch mal richtiger zu machen. Auch in Bezug auf 32 Bit und 64 Bit, wo man immernoch auf die die passenden Typen achten sollte. |
AW: DrawText mit 2 Schriftgrößen?
:thumb:
Du kannst auch vieles mit Unicode machen. Du wirst es nicht glauben, aber jemand kam auf die komische Idee und hat z.B. Kurziv, Fett, Hochgestellt und Tiefgestellt dort versteckt. :stupid: Oder Genderzeugs für Smilies ... Hautfarbe, Haarfarbe und Geschlecht. :freak: ![]() Nicht wundern, dass dort Einiges fehlt, aber z.B. ² und ³ gibt es schon sehr lange wo anders, siehe deine Tastatur. :zwinker: Und das TM, das gibt es schon seit Ewigkeiten als eigenes Zeichen. ![]() Frühlingsrolle™ |
AW: DrawText mit 2 Schriftgrößen?
Zitat:
Wenn ich anfange "DrawText(" zu schreiben, gibt's dann auch eine Info für PWideChar. Der Code ist nur für mich. Es sei denn ich verkaufe ihn für tausende von Euros :) Aber Danke für die Info |
AW: DrawText mit 2 Schriftgrößen?
Zitat:
Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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