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

Retour à La Une de Logo Paperblog

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