Bonjour à tous.
Premier code que je mets en ligne. Vous en trouverez sans doute des plus complets.
Moi je voulais une fonction simple, qui m'ajuste automatiquement la largueur des mes colones de mon FlexGrid en fonction du mot le plus grand contenu dans cette dernière.
Alors il faut :
1 MSFlexGrid1 de meme nom
1 Label de nom LblMOT avec surtout la propriété "AutoSize" à True !!!!
Ensuite la technique consiste à ballayer toutes les cellules, et à compter le nombre de caractères.
je stock cette longueur de chaine dans une variable et ensuite je boucle sur toutes les cellules de la colonne. Si le suivant est plus grand que le précédent alors je copie ce mot dans le Label à autosize.
(Ainsi le label s'adapte automatiquement donnant la larg)
Des que j'ai fini ma col, je vais voir le label et je prend la propriété "Width" auquel je rajoute un p'tit peu: ici 300 (question de lisibilité afin d'éviter que les mots des col soit trop cote à cote)
Puis on recommence avec la col suivante.
Source / Exemple :
'Voici l'appel de fonction :
Call redimflexGd(MSFlexGrid1.Cols, MSFlexGrid1.Rows)
'Voici la Fonction :
'----------------------------------------------------------------------------
Function redimflexGd(nbcols As Integer, nbrows As Integer)
Dim nbcol As Integer
Dim nbrow As Integer
Dim longtxt As Integer
Dim max As Integer
max = 0
longtxt = 0
For nbcol = 0 To nbcols - 1
For nbrow = 0 To nbrows - 1
With MSFlexGrid1
.Col = nbcol
.Row = nbrow
End With
longtxt = Len(MSFlexGrid1.Text)
If longtxt > max Then
max = longtxt
LblMOT.Caption = MSFlexGrid1.Text
End If
Next
MSFlexGrid1.ColWidth(nbcol) = LblMOT.Width + 300
max = 0
longtxt = 0
Next
End Function
Conclusion :
Merci de me donner vos commentaires.
ça permet d'évoluer et de comprendre des erreurs que j'aurais pu faire.
@++
Guillaume B
(Shewy80)
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?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.