35 Stimmen

Delphi/Lazarus: TextWidth und TextHeight ohne Canvas bestimmen

Frage von Gast | Letztes Update am 21.07.2022 | Erstellt am 17.01.2016

Ich würde gerne die Breite und Höhe (TextWidth und TextHeight) für eine Schrift beziehungsweise für bestimmte Schriftgröße feststellen, ohne dass mir ein Canvas dafür zur Verfügung steht.

Zum Beispiel hat ein Button (TButton) ja gar keinen Canvas. Wie soll man da dann damit arbeiten? Kennt jemand einen Trick dafür?

AntwortenPositivNegativ
2Beste Antwort2 Stimmen

Ich mache das immer so, dass ich ein Bitmap in einer Funktion erstelle und daran meine Messungen durchführe. Das Bitmap kann ich dann wieder löschen (freigeben), wenn ich es nicht mehr brauche.

Hier wäre eine Funktion, um die Breite (TextWidth) herauszufinden:

function GetTextWidth(AText: string): integer;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Assign(self.Font);
    result := bmp.Canvas.TextWidth(AText);
  finally
    bmp.Free;
  end;
end;

Und hier eine Funktion für die Höhe (TextHeight):

function GetTextHeight(AText: string): integer;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Assign(self.Font);
    result := bmp.Canvas.TextHeight(AText);
  finally
    bmp.Free;
  end;
end;

Mit self.Font übernehmen wir hier die Schrift von Form1, es wäre aber natürlich genauso denkbar bmp.Canvas.Font beliebig in der Funktion anzupassen. Zum Beispiel so:

function GetTextWidth(AText, AFontName: string; 
  AFontSize: integer): integer;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Name := AFont;
    bmp.Canvas.Font.Size := AFontSize;
    result := bmp.Canvas.TextWidth(AText);
  finally
    bmp.Free;
  end;
end;

Hier können wir auch den Namen der Schrift sowie die Schriftgröße als Parameter übergeben.

Wenn du die Größe des Buttons setzen möchtest, kannst du dies allerdings auch über die Eigenschaft AutoSize machen. Wenn diese auf TRUE steht, passt sich der Button automatisch an seinen Text an.
Letztes Update am 21.07.2022 | Erstellt am 18.01.2016

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.