cs_VinceVG
Messages postés221Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention30 mars 2016
-
7 nov. 2006 à 19:43
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
12 nov. 2006 à 15:07
Salut,
Pour créer la propriété autosize d'un controle, j'ai besoin de connaitre la taille d'une chaine (en pixel ou twips) dans une police spécifiée. Est-ce possible ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 nov. 2006 à 11:40
Ouille !
Correction de ce que j'ai dit plus haut à propos de l'utilisation d'un Label invisible (une autre fois inutile) : Seule la propriété Autosize à True, Wordwrap devant être à False.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 nov. 2006 à 19:54
Salut
Oui, il faut utiliser la méthode TextWidth ou TewtHeight des objets Form ou Picture :
Tu places une PictureBox (que tu rends invisible lors du Run) sur ta forme.
Pour connaitre la taille en Twips (ou Pixel, tout dépend du ScaleMode), il te suffit d'affecter la même police et la même taille à ce PictureBox
maPicture.Font = monLabel.Font
et tu récupères la taille avec
Taille = maPicture.TextWidth(monLabel.Caption)
ou
Taille = maPicture.TextWidth("Troulala itoo")
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 nov. 2006 à 00:08
Holà Ami Jack !
C'est pire !
Voilà le test :
Ma taille bouge bien mais... pas avec ton code, ami !
Essaye donc
Private Sub Form_Activate()
monlabel.Caption = "Voilà bien la preuve de ce que je dis"
End Sub
Private Sub Command1_Click()
For i = 8 To 20
monlabel.FontSize = i
testefont monlabel
Next
End Sub
Sub testefont(etiq)
'=============mon code============
With Font
.Name = etiq.FontName
.Size = etiq.FontSize
.Bold = etiq.FontBold
taillejmf = TextWidth(etiq.Caption)
End With
'============le tien=============
Picture1.Font = etiq.Font
taillejack = Picture1.TextWidth(etiq.Caption)
' et le résultat des courses MsgBox taillejmf & " " & taillejack
End Sub
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 nov. 2006 à 11:12
Je veux bien que Jack me découpe en morceau (ou m'éventre dans la plus pure tradition d'un autre Jack)
Mais :
1) voilà ce qui était écrit et que j'ai repris (voir le code de Jack plus haut... ce n'est pas moi qui l'ai écrit...)
maPicture.Font = monLabel.Font
2) Il n'est, je le répète, nul besoin de passer par un subterfuge (picturebox invisible). TextWidth et TextHeight fonctionnent directement avec l'objet Font (ne pas confondre avec la propriété Font). Il n'existe qu'un seul OBJET font et textwidth et Textheight se fondent sur ses définitions en cours.
3) S'il fallait à tout prix donner la préférence à l'utilisation d'un objet tiers (complètement inutile), il suffisait alors d'utiliser un Label invisible (moins lourd qu'une picturebox) avec ses propriétés Autosize et WordWrap à True, d'y "envoyer" le texte et d'en mesurer la nouvelle taille..., non ? Mais, une autre fois, ce chemin détourné n'est nullement nécessaire et alourdirait inutilement l'application
4) Je n'ai rien inventé. Je n'ai fait qu'appliquer VB
5) voilà plus de 10 ans que j'utilise textwidth et textheight à des fins précises dont l'une, longtemps commercialisée (assez cher) , est un activeX de redimensionnement en fonction de la résolution de l'écran client.
Alors de Jacques (bibi) à Jack : Pardonne-moi et essaye ce que j'ai exposé (tu y gagneras).
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 nov. 2006 à 13:35
Pour être tout-à-fait précis, :
Lesméthodes TextWidth et Textheight de VB appellent tout simplement la fonction GetTextExtentPoint32 de la librairie GDI32.dll de Windows