@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;