Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zoury
> J'ai l'impression que la fonction MeasureString est boguée !!!
Il semblerait que MeasureString() ne renvoit pas la taille de manière exact.. elle renvoit plutôt la taille minimum exigée pour permettre l'affichage complet d'une chaine. De plus il *paraitrait que* plus la chaine est longue moins la taille retournée est précise (selon un témoignage tiré d'une discussion dans les archives que j'ai croisé un jour).
tiré de l'aide : '*** La méthode MeasureString est destinée à une utilisation avec des chaînes individuelles et comprend une petite quantité d'espace supplémentaire située avant et après la chaîne pour tenir compte des glyphes surplombants. La méthode DrawString règle également les points de glyphe afin d'optimiser la qualité d'affichage et peut afficher une chaîne dans un format plus étroit que ce qui est indiqué par MeasureString. Pour obtenir des métriques appropriées pour des chaînes adjacentes dans la mise en page (par exemple, lors de l'implémentation d'un texte mis en forme), utilisez la méthode MeasureCharacterRanges. '***
-- Cordialement Yanick MVP pour Visual Basic
> J'ai l'impression que la fonction MeasureString est boguée !!!
Il semblerait que MeasureString() ne renvoit pas la taille de manière
exact.. elle renvoit plutôt la taille minimum exigée pour permettre
l'affichage complet d'une chaine. De plus il *paraitrait que* plus la chaine
est longue moins la taille retournée est précise (selon un témoignage tiré
d'une discussion dans les archives que j'ai croisé un jour).
tiré de l'aide :
'***
La méthode MeasureString est destinée à une utilisation avec des chaînes
individuelles et comprend une petite quantité d'espace supplémentaire située
avant et après la chaîne pour tenir compte des glyphes surplombants. La
méthode DrawString règle également les points de glyphe afin d'optimiser la
qualité d'affichage et peut afficher une chaîne dans un format plus étroit
que ce qui est indiqué par MeasureString. Pour obtenir des métriques
appropriées pour des chaînes adjacentes dans la mise en page (par exemple,
lors de l'implémentation d'un texte mis en forme), utilisez la méthode
MeasureCharacterRanges.
'***
> J'ai l'impression que la fonction MeasureString est boguée !!!
Il semblerait que MeasureString() ne renvoit pas la taille de manière exact.. elle renvoit plutôt la taille minimum exigée pour permettre l'affichage complet d'une chaine. De plus il *paraitrait que* plus la chaine est longue moins la taille retournée est précise (selon un témoignage tiré d'une discussion dans les archives que j'ai croisé un jour).
tiré de l'aide : '*** La méthode MeasureString est destinée à une utilisation avec des chaînes individuelles et comprend une petite quantité d'espace supplémentaire située avant et après la chaîne pour tenir compte des glyphes surplombants. La méthode DrawString règle également les points de glyphe afin d'optimiser la qualité d'affichage et peut afficher une chaîne dans un format plus étroit que ce qui est indiqué par MeasureString. Pour obtenir des métriques appropriées pour des chaînes adjacentes dans la mise en page (par exemple, lors de l'implémentation d'un texte mis en forme), utilisez la méthode MeasureCharacterRanges. '***
-- Cordialement Yanick MVP pour Visual Basic
MrChris
Ok, super... Mais je fais comment moi maintenant pour mesurer ma chaine ??? Tans pis si ce n'est pas exact, mais au moins que ca fonctionne ! Une idée ???
Merci MrChris
Ok, super...
Mais je fais comment moi maintenant pour mesurer ma chaine ???
Tans pis si ce n'est pas exact, mais au moins que ca fonctionne !
Une idée ???
Ok, super... Mais je fais comment moi maintenant pour mesurer ma chaine ??? Tans pis si ce n'est pas exact, mais au moins que ca fonctionne ! Une idée ???
Merci MrChris
Zoury
> Mais je fais comment moi maintenant pour mesurer ma chaine ???
voici un exemple d'utilisation de MeasureString(), dis le nous si ce n'est pas assez précis.. '*** Dim siz As Size = Label1.CreateGraphics().MeasureString(Label1.Text, Label1.Font).ToSize() '***
-- Cordialement Yanick MVP pour Visual Basic
> Mais je fais comment moi maintenant pour mesurer ma chaine ???
voici un exemple d'utilisation de MeasureString(), dis le nous si ce n'est
pas assez précis..
'***
Dim siz As Size = Label1.CreateGraphics().MeasureString(Label1.Text,
Label1.Font).ToSize()
'***
> Mais je fais comment moi maintenant pour mesurer ma chaine ???
voici un exemple d'utilisation de MeasureString(), dis le nous si ce n'est pas assez précis.. '*** Dim siz As Size = Label1.CreateGraphics().MeasureString(Label1.Text, Label1.Font).ToSize() '***
-- Cordialement Yanick MVP pour Visual Basic
MrChris
Ok, ca à l'air d'être mieux... Je faisait de la façon suivante :
Dim b As New Bitmap(1, 1) Dim Graph As Graphics = System.Drawing.Graphics.FromImage(b) Dim Format As StringFormat = StringFormat.GenericTypographic TailleFen.Width = Graph.MeasureString(Texte, Fnt, 1000, Format).Width + 8 TailleFen.Height = Graph.MeasureString(Texte, Fnt, 1000, Format).Height + 2
Seulement, la mesure devenait imprécise avec un texte long !!! Le fait de passer par un label me semble plus stable... A confirmer !
Merci !!! @+MrChris
Ok, ca à l'air d'être mieux...
Je faisait de la façon suivante :
Dim b As New Bitmap(1, 1)
Dim Graph As Graphics = System.Drawing.Graphics.FromImage(b)
Dim Format As StringFormat = StringFormat.GenericTypographic
TailleFen.Width = Graph.MeasureString(Texte, Fnt, 1000, Format).Width + 8
TailleFen.Height = Graph.MeasureString(Texte, Fnt, 1000, Format).Height + 2
Seulement, la mesure devenait imprécise avec un texte long !!!
Le fait de passer par un label me semble plus stable...
A confirmer !
Ok, ca à l'air d'être mieux... Je faisait de la façon suivante :
Dim b As New Bitmap(1, 1) Dim Graph As Graphics = System.Drawing.Graphics.FromImage(b) Dim Format As StringFormat = StringFormat.GenericTypographic TailleFen.Width = Graph.MeasureString(Texte, Fnt, 1000, Format).Width + 8 TailleFen.Height = Graph.MeasureString(Texte, Fnt, 1000, Format).Height + 2
Seulement, la mesure devenait imprécise avec un texte long !!! Le fait de passer par un label me semble plus stable... A confirmer !
Merci !!! @+MrChris
MrChris
Mais c'est un bug de la fonction measurestring ou c'est un comportement normal ??? J'ai des doutes...
@+MrChris
Mais c'est un bug de la fonction measurestring ou c'est un comportement
normal ???
J'ai des doutes...
Mais c'est un bug de la fonction measurestring ou c'est un comportement normal ??? J'ai des doutes...
@+MrChris
Ludovic SOEUR
Ce n'est pas un bug de la fonction MeasureString qui ne fait qu'une approximation (bonne au passage quand même) de la taille et de façon rapide. Pour être très précis, il faut utiliser la méthode SetMeasurableCharacterRanges et fournir les paramètres appropriés à StringFormat.
Donc au lieu d'utiliser private Size stringSize_old(string s,Graphics g,Font f) { return g.MeasureString(s,f).ToSize(); }
vous pouvez utiliser les lignes suivantes : private Size stringSize(string s,Graphics g,Font f) { if ((s==null)||(s=="")) return new Size(0,0); StringFormat stringFormat=new StringFormat(StringFormatFlags.NoWrap|StringFormatFlags.NoClip); stringFormat.SetMeasurableCharacterRanges(new CharacterRange[]{new CharacterRange(0,s.Length)}); RectangleF rect=g.MeasureCharacterRanges(s,Font,new RectangleF(0,0,0,0),stringFormat)[0].GetBounds(g); return new Size((int)rect.Width,(int)rect.Height); }
Regardez l'aide de StringFormatFlags qui permet en plus par exemple de prendre en compte les espaces de fin de chaine.
J'espère que c'est ce que vous recherchiez.
Cordialement,
Ludovic Soeur.
"MrChris" a écrit dans le message de news:
Mais c'est un bug de la fonction measurestring ou c'est un comportement normal ??? J'ai des doutes...
@+MrChris
Ce n'est pas un bug de la fonction MeasureString qui ne fait qu'une
approximation (bonne au passage quand même) de la taille et de façon rapide.
Pour être très précis, il faut utiliser la méthode
SetMeasurableCharacterRanges et fournir les paramètres appropriés à
StringFormat.
Donc au lieu d'utiliser
private Size stringSize_old(string s,Graphics g,Font f) {
return g.MeasureString(s,f).ToSize();
}
vous pouvez utiliser les lignes suivantes :
private Size stringSize(string s,Graphics g,Font f) {
if ((s==null)||(s=="")) return new Size(0,0);
StringFormat stringFormat=new
StringFormat(StringFormatFlags.NoWrap|StringFormatFlags.NoClip);
stringFormat.SetMeasurableCharacterRanges(new CharacterRange[]{new
CharacterRange(0,s.Length)});
RectangleF rect=g.MeasureCharacterRanges(s,Font,new
RectangleF(0,0,0,0),stringFormat)[0].GetBounds(g);
return new Size((int)rect.Width,(int)rect.Height);
}
Regardez l'aide de StringFormatFlags qui permet en plus par exemple de
prendre en compte les espaces de fin de chaine.
J'espère que c'est ce que vous recherchiez.
Cordialement,
Ludovic Soeur.
"MrChris" <mrchris@spam.com> a écrit dans le message de
news:eUq2lUMGFHA.3908@TK2MSFTNGP12.phx.gbl...
Mais c'est un bug de la fonction measurestring ou c'est un comportement
normal ???
J'ai des doutes...
Ce n'est pas un bug de la fonction MeasureString qui ne fait qu'une approximation (bonne au passage quand même) de la taille et de façon rapide. Pour être très précis, il faut utiliser la méthode SetMeasurableCharacterRanges et fournir les paramètres appropriés à StringFormat.
Donc au lieu d'utiliser private Size stringSize_old(string s,Graphics g,Font f) { return g.MeasureString(s,f).ToSize(); }
vous pouvez utiliser les lignes suivantes : private Size stringSize(string s,Graphics g,Font f) { if ((s==null)||(s=="")) return new Size(0,0); StringFormat stringFormat=new StringFormat(StringFormatFlags.NoWrap|StringFormatFlags.NoClip); stringFormat.SetMeasurableCharacterRanges(new CharacterRange[]{new CharacterRange(0,s.Length)}); RectangleF rect=g.MeasureCharacterRanges(s,Font,new RectangleF(0,0,0,0),stringFormat)[0].GetBounds(g); return new Size((int)rect.Width,(int)rect.Height); }
Regardez l'aide de StringFormatFlags qui permet en plus par exemple de prendre en compte les espaces de fin de chaine.
J'espère que c'est ce que vous recherchiez.
Cordialement,
Ludovic Soeur.
"MrChris" a écrit dans le message de news:
Mais c'est un bug de la fonction measurestring ou c'est un comportement normal ??? J'ai des doutes...
@+MrChris
MrChris
Oui, j'avais en premier lieu utilisé MeasureCharacterRanges suivant les conseils dans le lien ci dessous...