For row = 0 To pFlexgrid.Rows - 1
If W < Printer.TextWidth(pFlexgrid.TextMatrix(row, col)) Then
W = Printer.TextWidth(pFlexgrid.TextMatrix(row, col))
End If
Next
pFlexgrid.ColWidth(col) = W + 200 'can be changed to accomodate
End Function
A+
SuperTonic
Messages postés53Date d'inscriptionmercredi 24 juillet 2002StatutMembreDernière intervention16 mars 2011 27 déc. 2004 à 20:17
tu n'es pas fou silmon LOL, ya bien un Len qui traine qu'il faut virer...
Merci à bidoch78 d'avoir corriger !
Bonne fêtes de fin d'année à tous et bonne prog"
microalexx
Messages postés12Date d'inscriptionlundi 30 juin 2003StatutMembreDernière intervention 9 juillet 2007 23 déc. 2004 à 15:44
Silmon a dit :
"Deuxiement:
Tu dis qu'il y a de PETITES ameliorations à apporter comme 'stocker dans Max la long de la chaine au lieu de mettre le Width le plus grand de la boucle'."
tu as inversé ce qu'il a dit, marche pas bien ton copier coller :)
relis son poste tu verra :)
sinon sympa la source.
+
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 21 déc. 2004 à 17:35
En effet il faudrait plutot un truc du genre :
For nbcol = 0 To nbcols - 1
For nbrow = 0 To nbrows - 1
With MSFlexGrid1
.Col = nbcol
.Row = nbrow
End With
with LblMOT
.Caption = MSFlexGrid1.Text
'ici on fait les assignations .cellFont vers Label
end with
If LblMOT.Width > max Then max = LblMOT.Width
Next NbRow
MSFlexGrid1.ColWidth(nbcol) = Max + 300
max = 0
Next NbCol
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007 21 déc. 2004 à 17:22
Salut SuperTonic,
J'ai relu ton msg plusieurs fois, et lá franchement
y a un truc que je comprends mais pas du tout!
Premierement:
Tu ecris: "je ne prend pas en compte le nombre de letttre mais bien l'espace que prend une lettre"
mais dans ton code je lis:
(...)
longtxt = Len(MSFlexGrid1.Text)
if longtxt > max Then
max = longtxt
LblMOT.Caption = MSFlexGrid1.Text
End If
(...)
Ou je suis completement bète ou tu prends en compte
le nombre de letttre du texte. Alors?
Deuxiement:
Tu dis qu'il y a de PETITES ameliorations à apporter comme 'stocker dans Max la long de la chaine au lieu de mettre le Width le plus grand de la boucle'.
Or c'est EXACTEMENT ÇA que je me refere: garder le width le plus grand plutot que la longueur de chaine!!!
Encore une fois je deviens fou ou quoi?
SuperTonic
Messages postés53Date d'inscriptionmercredi 24 juillet 2002StatutMembreDernière intervention16 mars 2011 18 déc. 2004 à 09:34
Bonjour tout le monde.
Je suis un peu à réagir.
Alors concernant :
"iiii" (4 lettres) sera toujours plus court que "ooo" (3 lettres).
Le problème ne se pose pas, puisque je ne prend pas en compte le nombre de letttre mais bien l'espace que prend une lettre.
Si tu mets dans un Label Autosize "ooo" le label va s'étendre pour afficher "ooo" donc partant de là il suffit de récupérer la valeur du width pour l'attribuer à la largeur de la colone.
C'est tout bête ! Tu peux t'amuser à ettre du gras ou des iiii et des ww : ça marchera !
Mais il y a sans doute des petites amélioration à apporter. Comme par exp au lieu de stocker dans Max la long de la chaine, mettre le Width le plus grand de la boucle.
Voilà !
Bonne prog" les amis
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007 12 nov. 2004 à 16:30
Bidoch78
Je ne suis pas tres sûr de comprendre ce que tu veux dire par "comme il passe par un label, ca sera respecté".
Meme en passant par un label, le texte
"iiii" (4 lettres) sera toujours plus court que
"ooo" (3 lettres).
Donc il est preferable de faire un loop sur la grid et de recuperer la longueur max de chaque chaine, au lieu
de recuperer la chaine la plus longue et de prendre sa longueur.
Par ailleurs pour SuperTonic,
essaye la fonction TextWidth:
LongueurChaine=me.TextWidth(grid.textmatrix(row,col))
plutot que de passer par un label:
label1.caption = grid.textmatrix(row,col)
LongueurChaine=label1.width
-> ce sera plus rapide (surtout dans une boucle)
Mais certifie toi que les proprietes fonts de la form combinent avec celles de la grid.
++
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 10 nov. 2004 à 18:15
ah ok, excuses, mais comme il passe par un label, ca sera respecté.
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007 10 nov. 2004 à 17:57
non je ne pense pas.
Je ne parle pas de changement de font ni de changement de case,
mais de la longueur qu'occupe certaines lettre par rapport a d'autre.
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 10 nov. 2004 à 17:01
enfin c'est ce qu'il precise dans le 2eme post
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007 10 nov. 2004 à 16:44
Si j'ai bien compris ton algo, tu redim la colonne que pour le mot qui a le plus de lettres, n'est-ca pas?
Si c'est le cas, essaye avec:
- iiii (4 lettres)
- ooo (3 lettres)
Selon le tipe de font, le mot le plus "long" n'est pas toujours celui qui a le plus de lettres!
edsinouhe
Messages postés7Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention28 juin 2010 10 nov. 2004 à 08:17
Juste un petit conseil de développeur...
Lorsque tu définis des variables (Dim nbcol As Integer) il est préférable d'introduire des majuscules dans l'identifiant (Dim NbCol As Integer), ceci permet de détecter immédiatement une anomalie de frappe ou de définition qui n'apparaît que lors de l'exécution: variable non définie... (voir Option Explicit).
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 2 nov. 2004 à 21:06
un mot : simple
ton code est simple et bien construit.
Renfield avait fait un code pour retailler les msflexgrid mais le sien était beaucoup plus etoffé.
le tiens est simple, tres bien 9/10
SuperTonic
Messages postés53Date d'inscriptionmercredi 24 juillet 2002StatutMembreDernière intervention16 mars 2011 2 nov. 2004 à 20:52
bienvu !
j'ai pas penser aux chgmt de case !
puisque je n'en fais pas !
merci de ce complemt d'info important !
bidoch78
Messages postés67Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention 2 décembre 2005 2 nov. 2004 à 20:47
On fait la meme au taf.
Un petit complement si tu modifies les Fonts au niveau cellules il faudrait affecter les valeurs CellFontBold, etc.... à ton label.
16 févr. 2005 à 13:55
Tous les logiciles(word,excel etc..) se basent sur l'imprimante pour retailler et faire du wisiwig. donc l'ideal est:
Private Function AdjustColWidth(col As Long)
Dim row As Long
Dim W As Long
Printer.FontName = pFlexgrid.Font.Name
Printer.FontSize = pFlexgrid.Font.Size
Printer.FontBold = pFlexgrid.Font.Bold
For row = 0 To pFlexgrid.Rows - 1
If W < Printer.TextWidth(pFlexgrid.TextMatrix(row, col)) Then
W = Printer.TextWidth(pFlexgrid.TextMatrix(row, col))
End If
Next
pFlexgrid.ColWidth(col) = W + 200 'can be changed to accomodate
End Function
A+
27 déc. 2004 à 20:17
Merci à bidoch78 d'avoir corriger !
Bonne fêtes de fin d'année à tous et bonne prog"
23 déc. 2004 à 15:44
"Deuxiement:
Tu dis qu'il y a de PETITES ameliorations à apporter comme 'stocker dans Max la long de la chaine au lieu de mettre le Width le plus grand de la boucle'."
tu as inversé ce qu'il a dit, marche pas bien ton copier coller :)
relis son poste tu verra :)
sinon sympa la source.
+
21 déc. 2004 à 17:35
For nbcol = 0 To nbcols - 1
For nbrow = 0 To nbrows - 1
With MSFlexGrid1
.Col = nbcol
.Row = nbrow
End With
with LblMOT
.Caption = MSFlexGrid1.Text
'ici on fait les assignations .cellFont vers Label
end with
If LblMOT.Width > max Then max = LblMOT.Width
Next NbRow
MSFlexGrid1.ColWidth(nbcol) = Max + 300
max = 0
Next NbCol
21 déc. 2004 à 17:22
J'ai relu ton msg plusieurs fois, et lá franchement
y a un truc que je comprends mais pas du tout!
Premierement:
Tu ecris: "je ne prend pas en compte le nombre de letttre mais bien l'espace que prend une lettre"
mais dans ton code je lis:
(...)
longtxt = Len(MSFlexGrid1.Text)
if longtxt > max Then
max = longtxt
LblMOT.Caption = MSFlexGrid1.Text
End If
(...)
Ou je suis completement bète ou tu prends en compte
le nombre de letttre du texte. Alors?
Deuxiement:
Tu dis qu'il y a de PETITES ameliorations à apporter comme 'stocker dans Max la long de la chaine au lieu de mettre le Width le plus grand de la boucle'.
Or c'est EXACTEMENT ÇA que je me refere: garder le width le plus grand plutot que la longueur de chaine!!!
Encore une fois je deviens fou ou quoi?
18 déc. 2004 à 09:34
Je suis un peu à réagir.
Alors concernant :
"iiii" (4 lettres) sera toujours plus court que "ooo" (3 lettres).
Le problème ne se pose pas, puisque je ne prend pas en compte le nombre de letttre mais bien l'espace que prend une lettre.
Si tu mets dans un Label Autosize "ooo" le label va s'étendre pour afficher "ooo" donc partant de là il suffit de récupérer la valeur du width pour l'attribuer à la largeur de la colone.
C'est tout bête ! Tu peux t'amuser à ettre du gras ou des iiii et des ww : ça marchera !
Mais il y a sans doute des petites amélioration à apporter. Comme par exp au lieu de stocker dans Max la long de la chaine, mettre le Width le plus grand de la boucle.
Voilà !
Bonne prog" les amis
12 nov. 2004 à 16:30
Je ne suis pas tres sûr de comprendre ce que tu veux dire par "comme il passe par un label, ca sera respecté".
Meme en passant par un label, le texte
"iiii" (4 lettres) sera toujours plus court que
"ooo" (3 lettres).
Donc il est preferable de faire un loop sur la grid et de recuperer la longueur max de chaque chaine, au lieu
de recuperer la chaine la plus longue et de prendre sa longueur.
Par ailleurs pour SuperTonic,
essaye la fonction TextWidth:
LongueurChaine=me.TextWidth(grid.textmatrix(row,col))
plutot que de passer par un label:
label1.caption = grid.textmatrix(row,col)
LongueurChaine=label1.width
-> ce sera plus rapide (surtout dans une boucle)
Mais certifie toi que les proprietes fonts de la form combinent avec celles de la grid.
++
10 nov. 2004 à 18:15
10 nov. 2004 à 17:57
Je ne parle pas de changement de font ni de changement de case,
mais de la longueur qu'occupe certaines lettre par rapport a d'autre.
10 nov. 2004 à 17:01
10 nov. 2004 à 16:44
Si c'est le cas, essaye avec:
- iiii (4 lettres)
- ooo (3 lettres)
Selon le tipe de font, le mot le plus "long" n'est pas toujours celui qui a le plus de lettres!
10 nov. 2004 à 08:17
Lorsque tu définis des variables (Dim nbcol As Integer) il est préférable d'introduire des majuscules dans l'identifiant (Dim NbCol As Integer), ceci permet de détecter immédiatement une anomalie de frappe ou de définition qui n'apparaît que lors de l'exécution: variable non définie... (voir Option Explicit).
2 nov. 2004 à 21:06
ton code est simple et bien construit.
Renfield avait fait un code pour retailler les msflexgrid mais le sien était beaucoup plus etoffé.
le tiens est simple, tres bien 9/10
2 nov. 2004 à 20:52
j'ai pas penser aux chgmt de case !
puisque je n'en fais pas !
merci de ce complemt d'info important !
2 nov. 2004 à 20:47
Un petit complement si tu modifies les Fonts au niveau cellules il faudrait affecter les valeurs CellFontBold, etc.... à ton label.