Magazine Internet

[GDI] Mesurer un texte et application

Publié le 19 février 2009 par Jeremy.jeanson
Voici un petit rappel pour un problème qui se pause souvent en GDI : Connaitre la longueur d’un texte sans le dessiner. Heureusement la classe Graphics  donne accès à une Méthode MeasureString qui retourne un objet de type SizeF :
// Avec g étant votre Graphics
SizeF texteSize = g.MeasureString("Texte à mesurer", LaFontQueVousutilisez);

Très pratique pour faire du positionnement de texte par la suite.

Exemple pour dessiner un carré et une String et centrer le tout en fonction d’un position x.

Vb
Dim g As Graphics  = ...  ' le graphics sur lequel on dessine
Dim x As Int32 = ... ' la position x de l'ensemble
Dim y As Int32 = ... ' la position y de l'ensemble
Dim texte as String = ... ' le texte à affciher
Dim couleur As Color = ... ' la couleur de remmplicage du carré
Dim _heightCarre As Int32 = 10
Dim _espaceText As Int32 = 4

' Mesurer la longuer du text à  afficher
Dim largeurTexte As Int32 = Convert.ToInt32(g.MeasureString(texte, Me.Font).Width)
Dim positionX As Int32 = x - (largeurTexte + _heightCarre + _espaceText) / 2

' Dessiner le carré coloré
Dim rect As new Rectangle(positionX, _legendTop, _height, _height)

g.FillRectangle(new SolidBrush(couleur), rect)
g.DrawRectangle(Pens.Black, rect)

' Dessin du texte
g.DrawString(texte, _
	Me.Font, _
    Brushes.Black, _
    positionX + _heightCarre + _espaceText, _
    _legendTop)

C#

Graphics g = ...; // le graphics sur lequel on dessine
Int32 x = ...; // la position x de l'ensemble
Int32 y = ...; // la position y de l'ensemble
Int32 texte = ...; // le texte à affciher
Color couleur = ...; // la couleur de remmplicage du carré
Int32 _heightCarre = 10;
Int32 _espaceText = 4;

// Mesurer la longuer du text à  afficher
Int32 largeurTexte = Convert.ToInt32(g.MeasureString(texte, this.Font).Width);
Int32 positionX = x - (largeurTexte + _heightCarre + _espaceText) / 2;

// Dessiner le carré coloré
Rectangle rect = new Rectangle(positionX, _legendTop, _height, _height);

g.FillRectangle(new SolidBrush(couleur), rect);
g.DrawRectangle(Pens.Black, rect);

// Dessin du texte
g.DrawString(texte,
	this.Font,
    Brushes.Black,
    positionX + _heightCarre + _espaceText,
    _legendTop);

Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte