bonsoir, j'ai posé cette source en sachant pertinemment qu'il y avait mieux a faire.... Malheuresement ce probleme ne se posera plus puis ... je passe sous java ! Merci pour le complément
blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 20161 8 déc. 2010 à 16:25
Cet post date un peu, mais effectivement la méthode la plus simple et rapide est d'utiliser MeasureString()
Comme il n'y avait pas d'exemple précis dans cette discussion, en voici un avec l'objet ListView en affichage "Details", pour redimensionner la largeur d'une colonne
' Déclarations
Dim leGraphic As Graphics = laListView.CreateGraphics
Dim unItem as ListViewItem = Nothing
Dim tailleChaine As Integer = 0
' Ajout d'un nouveau texte dans la liste
unItem = laListView.Items.Add("une chaine de longueur variable...")
' Récupération de la taille
tailleChaine = CInt(leGraphic.MeasureString(unItem.Text, unItem.Font).Width)
' Si la largueur de la colonne est inférieur au texte ajouté, alors
' on met à jour la taille de la colonne pour tout afficher
If tailleChaine > laListView.Columns.Item(0).Width Then laListView.Columns.Item(0).Width = tailleChaine
Ce petit code peut-être complété dans une boucle d'ajout de texte, la largeur affichée de la colonne sera toujours calée sur la plus grande chaine. On peut bien évidement varier et ce caler sur la plus petite... c'est libre court à la créativité !
psycho81
Messages postés84Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention17 février 2008 11 janv. 2006 à 17:17
Bon sinon, pour la mesure d'un string, partout je vois que Graphics.MeasureString(texte, font) est la meilleure techniques pour des utilisations non répétitives (et de courts textes). Vu que l'on transforme le texte en bitmap ... si cherche à mesurer la taille en pixel d'un livre entier... on va saturer la mémoire.
psycho81
Messages postés84Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention17 février 2008 11 janv. 2006 à 17:12
Ah ok, merci à toi :)
J'ai eu souvent à lire tes codes et, bien que l'envie m'en démange, je n'en ferai pas les louanges, les jedis de l'informatique n'ont qu'a bien se tenir :)
Bon sinon, pour faire chier mon monde (il faut bien être un peu critique aussi), ce code n'est pas standard .NET (API = windows) donc pas compatible sous MONO. On ne devrait donc jamais utiliser d'API sous .NET.
Bon je me tais :x
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 11 janv. 2006 à 15:57
Ah non, tu n'as rien compris ;p
Comme dit dans ton texte : "en utilisant comme police celle liée au contexte graphique passé en paramètre", donc si tu lui passe : Picture1.hdc, il utilisera la police de Picture1.hdc et non celle de Form1, et donc, tiendras compte de la taille, du nom, du style de la police, ce qui est quand même bien plus rigoureux que cette source !
DarK Sidious
psycho81
Messages postés84Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention17 février 2008 11 janv. 2006 à 11:25
DARKSIDIOUS,
en cherchant des infos sur la fonction GetTextExtentPoint32, j'ai trouvé çà :
<<
La fonction GetTextExtentPoint32 calcule la taille du texte en utilisant comme police celle liée au contexte graphique passé en paramètre. Donc pour que le résultat soit exact, la police de la form doit être la même que celle du label.
>>
Si je comprends bien, en fait c'es tla police du form qui est prise en compte et non la police de l'objet en cours qui est pris pour le calcul ? Ou bien n'ai je pas compris ?
boursicotteur
Messages postés201Date d'inscriptionmercredi 25 septembre 2002StatutMembreDernière intervention10 novembre 2007 7 sept. 2005 à 23:06
Je ne travailles pas en .net mais il me semble que ton code donne la largeur du label et non celle du texte écrit sur le label. C'est vraiment pas la même chose.
Pour connaître la largeur d'un mot, j'utilise plutôt la méthode "textwidth" qui est applicable sur des objets Form, PictureBox et Printer mais tu peux toujours jouer d'astuce pour connaître la largeur d'un mot sur un label... Il suffit simplement de créer un picturebox que tu prendras soin de paramétrer de la même façon que ton label (police, taille police, etc) puis d'appliquer la méthode textwidth sur ce picturebox.
Il doit bien y avoir l'équivalent en .net
cs_christoni
Messages postés140Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 1 novembre 20107 5 sept. 2005 à 13:32
Effectivement, en recopiant la source chez moi pour la mettre en ligne, j'ai oublié le H de nothing. (effectivement, nous n'avons pas internet sur nos postes du bureau, question sécurité)
oui, je sais que c'est bourrin mais quand on touche que dalle aux api.... Mais si vous avez une fonction toute faite avec des api, je suis preneur
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 5 sept. 2005 à 08:23
pour la ligne :
taille_en_pixel_d_une_chaine_de_caractere = label1.width
essaye
return lable1.width
Attention, cela quitte la procédure immédiatement.
Sinon pour graphics, j'avais essayer, mais j'ai eu un pb, s'agit-il d'une fonction shared ? Parce que g pas réussi à y accéder sans devoir créer un objet (me.creategraphics).
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 4 sept. 2005 à 22:51
mais ca... ce n'est pas nouveau, puisqu'on l'avait déjà en VB6.
THE VIPER
Messages postés46Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention19 octobre 2006 4 sept. 2005 à 22:48
je crois que ca servira pour changer la taille d'un label par raport au text ...
on peut utiliser
label1.autosize = true
et ca sera automatiquement redimentione
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 4 sept. 2005 à 20:28
le mot clé noting n'existe pas en VB... c'est Nothing.
Enfin, le Dispose libère toutes les ressources utilisées par l'objet avant de détruire celui-ci. Il faut donc toujours utiliser Dispose à la place de Nothing quand l'objet est Disposable.
Enfin, je trouve que DarkSidious a raison. Il est quand même préférable d'utiliser la méthode MeasureString de l'object System.Drawing.Graphics.
jrbleboss
Messages postés480Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention 3 septembre 20071 3 sept. 2005 à 19:49
Oui c'est un peu bourrin comme technique mais c pas con.
JRB
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 3 sept. 2005 à 15:19
Tiens, on a réactiver le code ?
Donc pour tout ceux à qui ca interesse de connaitre la largeur du texte, je vous conseille plutôt d'utiliser :
Graphics.MeasureString(texte, font)
Voilà pourquoi j'avais désactivé le code...
DarK Sidious
cs_Clem
Messages postés282Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention12 février 2007 3 sept. 2005 à 14:10
perso je me sers de l'api GetTextExtentPoint32, un peu plus fatiguant, mais plus rapide au moins ;)
cs_akina
Messages postés19Date d'inscriptionlundi 8 décembre 2003StatutMembreDernière intervention27 avril 2006 3 sept. 2005 à 12:40
8 déc. 2010 à 20:07
8 déc. 2010 à 16:25
Comme il n'y avait pas d'exemple précis dans cette discussion, en voici un avec l'objet ListView en affichage "Details", pour redimensionner la largeur d'une colonne
' Déclarations
Dim leGraphic As Graphics = laListView.CreateGraphics
Dim unItem as ListViewItem = Nothing
Dim tailleChaine As Integer = 0
' Ajout d'un nouveau texte dans la liste
unItem = laListView.Items.Add("une chaine de longueur variable...")
' Récupération de la taille
tailleChaine = CInt(leGraphic.MeasureString(unItem.Text, unItem.Font).Width)
' Si la largueur de la colonne est inférieur au texte ajouté, alors
' on met à jour la taille de la colonne pour tout afficher
If tailleChaine > laListView.Columns.Item(0).Width Then laListView.Columns.Item(0).Width = tailleChaine
Ce petit code peut-être complété dans une boucle d'ajout de texte, la largeur affichée de la colonne sera toujours calée sur la plus grande chaine. On peut bien évidement varier et ce caler sur la plus petite... c'est libre court à la créativité !
11 janv. 2006 à 17:17
11 janv. 2006 à 17:12
J'ai eu souvent à lire tes codes et, bien que l'envie m'en démange, je n'en ferai pas les louanges, les jedis de l'informatique n'ont qu'a bien se tenir :)
Bon sinon, pour faire chier mon monde (il faut bien être un peu critique aussi), ce code n'est pas standard .NET (API = windows) donc pas compatible sous MONO. On ne devrait donc jamais utiliser d'API sous .NET.
Bon je me tais :x
11 janv. 2006 à 15:57
Comme dit dans ton texte : "en utilisant comme police celle liée au contexte graphique passé en paramètre", donc si tu lui passe : Picture1.hdc, il utilisera la police de Picture1.hdc et non celle de Form1, et donc, tiendras compte de la taille, du nom, du style de la police, ce qui est quand même bien plus rigoureux que cette source !
DarK Sidious
11 janv. 2006 à 11:25
en cherchant des infos sur la fonction GetTextExtentPoint32, j'ai trouvé çà :
<<
La fonction GetTextExtentPoint32 calcule la taille du texte en utilisant comme police celle liée au contexte graphique passé en paramètre. Donc pour que le résultat soit exact, la police de la form doit être la même que celle du label.
>>
à cette adresse : http://vb.developpez.com/faq/?page=Graphisme
Si je comprends bien, en fait c'es tla police du form qui est prise en compte et non la police de l'objet en cours qui est pris pour le calcul ? Ou bien n'ai je pas compris ?
7 sept. 2005 à 23:06
Pour connaître la largeur d'un mot, j'utilise plutôt la méthode "textwidth" qui est applicable sur des objets Form, PictureBox et Printer mais tu peux toujours jouer d'astuce pour connaître la largeur d'un mot sur un label... Il suffit simplement de créer un picturebox que tu prendras soin de paramétrer de la même façon que ton label (police, taille police, etc) puis d'appliquer la méthode textwidth sur ce picturebox.
Il doit bien y avoir l'équivalent en .net
5 sept. 2005 à 13:32
http://www.codeproject.com/vb/net/MeasureStrings.asp
5 sept. 2005 à 11:20
Dim pTextSize As POINTAPI
GetTextExtentPoint32 me.hDC, "Salut", Salut, pTextSize
pTextSize stocke alors : en .X la largeur, en .Y la hauteur
Et surtout : ca gère la font sélectionnée !!! (car c'est surtout cà qui modifie la largeur d'un texte !!!).
DarK Sidious
5 sept. 2005 à 11:00
oui, je sais que c'est bourrin mais quand on touche que dalle aux api.... Mais si vous avez une fonction toute faite avec des api, je suis preneur
5 sept. 2005 à 08:23
taille_en_pixel_d_une_chaine_de_caractere = label1.width
essaye
return lable1.width
Attention, cela quitte la procédure immédiatement.
Sinon pour graphics, j'avais essayer, mais j'ai eu un pb, s'agit-il d'une fonction shared ? Parce que g pas réussi à y accéder sans devoir créer un objet (me.creategraphics).
4 sept. 2005 à 22:51
4 sept. 2005 à 22:48
on peut utiliser
label1.autosize = true
et ca sera automatiquement redimentione
4 sept. 2005 à 20:28
Enfin, le Dispose libère toutes les ressources utilisées par l'objet avant de détruire celui-ci. Il faut donc toujours utiliser Dispose à la place de Nothing quand l'objet est Disposable.
Enfin, je trouve que DarkSidious a raison. Il est quand même préférable d'utiliser la méthode MeasureString de l'object System.Drawing.Graphics.
3 sept. 2005 à 19:49
JRB
3 sept. 2005 à 15:19
Donc pour tout ceux à qui ca interesse de connaitre la largeur du texte, je vous conseille plutôt d'utiliser :
Graphics.MeasureString(texte, font)
Voilà pourquoi j'avais désactivé le code...
DarK Sidious
3 sept. 2005 à 14:10
3 sept. 2005 à 12:40