Einzelnen Beitrag anzeigen

MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: DrawText mit 2 Schriftgrößen?

  Alt 9. Feb 2020, 13:12
@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;
  Mit Zitat antworten Zitat