Graphics.MeasureString, Width trop important

Résolu
The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 - 11 févr. 2008 à 22:16
The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 - 13 févr. 2008 à 00:16
    Voilà je suis exposé à un problème apparemment connu mais dont je n'ai trouvé aucune solution ...
Le problème est simple : la fonction Graphics.MeasureString, du moin chez moi, retourne un Width qui ne corespond pas avec la largeur du texte affichée à l'écran. Il est quelques pixels plus large. Je tiens à préciser que les unités sont bien correctes partout et que ce n'est de là que vient le problème.

    Une recherche sur Google m'a vite montré que j'étais loin d'être le seul à avoir remarqué ce problème :http://www.google.be/search?q=MeasureString+Problem&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:official&client=firefox-a

    Certains proposent des solutions, mais en anglais, et jamais en VB2005 :
http://www.codeproject.com/KB/GDI-plus/measurestring.aspx

Quelqu'un a t-il une solution ?

Merci d'avance,
Simon

4 réponses

The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 1
13 févr. 2008 à 00:16
Pour ceux qui auraient le même problème, aparament cela pose problème avec les police symetriques (Courrier New, Lucida Console Etc ...)

J'ai trouvé une solution :
En réflechissant il suffit de mesurer un carractère puis de mesurer deux carractères puis de soustraire leurs largeurs :

Taille_1_Carractère Espace_Rajouté - Taille_2_Carractères + Espace_Rajouté = Taille_1_Carractère

    Public Function MeasureRealStringWidth(ByVal Graphics As Graphics, ByVal Font As Font) As Double
        Dim width1 As Double
        Dim width2 As Double

        width1 = Graphics.MeasureString("c", Font, 500).Width
        width2 = Graphics.MeasureString("cc", Font, 500).Width
        Return width2 - width1
    End Function
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 févr. 2008 à 08:16
Salut,

Sans chercher très loin, as tu essayé la solution en C# pour voir si elle corrigeait ton problème?

Ensuite, si elle convient, il ne te restera qu'a traduire le C# en VB et crois ce n'est pas ce qu'il y a de plus difficile.

@+: Ju£i?n
Pensez: Réponse acceptée
0
The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 1
12 févr. 2008 à 21:25
Bien oui etrangement, j'ai traduit la deuxieme et chez moi sans succes ...
Je n'avais pas pensé a essayer directement avec C#, merci pour l'idée ^^ je vais essayer de faire comme ca.
Simon
0
The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 1
12 févr. 2008 à 23:51
Aucunes des deux méthodes ne fonctionnent ... :( Elle retourne exactement la même valeur que MeasureString.Width.
C'est vraiment lourd, cela fait maintenant deux  jours que j'essaie de regler ce problème. Personne n'a trouvé une solution ? Ou il y a t'il moyen d'utiliser autre chôse que GDI+ comme une API ?

Simon
0
Rejoignez-nous