Modifier la hauteur de ligne d'un msflexgrid au fur et à mesure de la saisie

Soyez le premier à donner votre avis sur cette source.

Vue 6 423 fois - Téléchargée 977 fois

Description

Pour pouvoir utiliser un MSFlexGrid comme une grille dans laquelle on saisie des données, il importe de pouvoir modifier la hauteur des lignes au fur et à mesure de la frappe surtout lorsqu'on souhaite taper plusieurs paragraphes dans une seule ligne ou lorsque la ligne dépasse la largeur de la colonne.

La propriété WordWrap de la grille doit être mise à True, ce qui permet le renvoie automatiquement à la ligne des mots dépassant la largeur de la colonne. Mais si l'on s'en tient à cela, la hauteur de la ligne n'est pas modifié et ces mots peuvent donc être masqués.

Source / Exemple :


Private Sub AjusterLigne()
    
    Dim LeTexte As String
    Dim LaPhrase As String
    Dim Ligne As Integer
    Dim Colonne As Integer
    Dim LargeurColonne As Integer
    Dim HauteurLigne As Integer
    Dim NouvelleHauteur As Integer
    Dim z() As String
    Dim nbreLignes As Integer
    Dim i As Integer
    Dim h As Long
    
    LeTexte = Me.MSFlexGrid1.Text               'Le texte de la cellule
    Ligne = Me.MSFlexGrid1.Row               'La ligne en cours
    Colonne = Me.MSFlexGrid1.Col               'La colonne en cours
    LargeurColonne = Me.MSFlexGrid1.ColWidth(Colonne)     'La largeur de la colonne en cours
    HauteurLigne = Me.MSFlexGrid1.RowHeight(Ligne)      'La hauteur de la ligne en cours
    
    'Si la cellule est vidé de son contenu
    If LeTexte = "" Then Me.MSFlexGrid1.RowHeight(Ligne) = Me.TextHeight("X") + 40: Exit Sub
    
    z = Split(LeTexte, Chr(10))    'Découpe la chaine de la cellule en morceaux
    nbreLignes = UBound(z)
    If nbreLignes = 0 Then              'S'il n'y a pas de retour chariot...
        nbreLignes = 1                  '...il n'y a qu'une ligne (vide ou non)
    Else
        nbreLignes = nbreLignes + 1     'Sachant que UBound donne l'index maximum et démarre à 0,
    End If
    
    'La hauteur de la ligne est donc de...
    NouvelleHauteur = (Me.TextHeight("X") * nbreLignes)
        
    'Passe en revue chacune des lignes afin de savoir si elles sont plus longues que la colonne
    For i = LBound(z) To UBound(z)
        'Si tel est le cas, augmente la hauteur de la ligne...
        If Me.TextWidth(z(i)) > LargeurColonne Then
            h = Me.TextWidth(z(i)) / LargeurColonne
            NouvelleHauteur = NouvelleHauteur + Me.TextHeight(String(h - 1, Chr(10)))
        End If
    Next
    
    'Dimensionne finalement la ligne
    If NouvelleHauteur > HauteurLigne Then Me.MSFlexGrid1.RowHeight(Ligne) = NouvelleHauteur + 40
    
End Sub

Conclusion :


PS: j'ai utilisé la proposition de Davyboy (source n°7314) pour effectuer la saisie dans le MSFlexGrid...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Lolux
Messages postés
159
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 septembre 2005
-
(il semble que le commentaire que j'ai écrit n'ai pas été pris en compte donc je recommence)
Je disais donc que cette source peut s'avérer très utile, sachant que je rajouterai quand même un test dans la fonction AjusterLigne() afin que la ligne garde la hauteur de la cellule la plus haute car dans le cas présent, si l'on rempli une cellule vide, la hauteur s'adapte à cett dernière.
cs_lir
Messages postés
28
Date d'inscription
dimanche 19 janvier 2003
Statut
Membre
Dernière intervention
26 mars 2008
-
Salut,
C'est super comme prog, mais comme je necomprend pas grand chose a vb, je me demandais si ton code pouvais etre adapté avec un base access 2000 .
Genre j'ai une base que je peux modifier comme dans ton code

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.