22 Voix

Delphi/Lazarus: Déterminer TextWidth et TextHeight sans Canvas

Question de Invité | Dernière mise à jour le 21/07/2022 | Créé le 01/05/2022

Je voudrais déterminer la largeur et la hauteur d'une police, respectivement, la largeur et la hauteur pour une taille de police spécifique (TextWidth et TextHeight) sans avoir un Canvas disponible.

Par exemple, un Button (TButton) n'a pas de Canvas. Alors, comment dois-je travailler avec ça? Quelqu'un a-t-il une astuce pour ça?

RépondrePositifNégatif
2Meilleure Réponse2 Voix

Lorsque je suis confronté à ce problème, je crée un Bitmap dans la fonction à laquelle je peux traiter mes mesures.  Après le traitement, je peux supprimer (free) ce bitmap au cas où je n'en aurais plus besoin.

Voici une fonction pour obtenir la largeur (TextWidth) d'une police:

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;

Et voici une fonction pour obtenir la hauteur (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;

Dans les deux fonctions, nous prenons la police de Form1, mais bien sûr, il est également possible d'utiliser et de définir toute autre police sur bmp.Canvas.Font dans la fonction. Par exemple comme ça:

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;

Dans cette fonction, nous pouvons également passer le nom de la police ainsi que la taille de la police en tant que paramètre.

Cependant, si vous souhaitez uniquement définir la taille d'un Button, vous pouvez également le faire en définissant la propriété AutoSize sur TRUE. Si tel est le cas, le bouton s'adapte automatiquement au texte contenant.
Dernière mise à jour le 21/07/2022 | Créé le 01/05/2022

RépondrePositif Négatif
Répondre

Sujets Connexes

Avis Important

Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.

Participer

Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.