IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Mettre dans une cellule d'un MSFlexgrid 2 lignes


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut Mettre dans une cellule d'un MSFlexgrid 2 lignes
    Bonjour,
    j'ai un msflegrid qui fait office de tableau à 2 colonnes,
    et il arrive que le contenu d'une cellule dépasse la taille de la colonne,
    saurez-vous comment faire une sorte de resize,
    afin que lorsque le texte ne rentre pas sur une ligne,
    il l'affiche sur 2 voire plus de ligne?
    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Salut,

    L'ajouter sur deux lignes je crois que ce n'est pas possible.

    Mais tu as des fonctions qui permet de resize la colonne en fonction.

    Voici une fonction que j'ai récupérer et que j'ai tester.
    Je ne sais plus ou je l'est pris par contre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Private Type Size
            cx As Long
            cy As Long
    End Type
     
    Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" _
                                                  (ByVal hdc As Long, ByVal lpsz As String, _
                                                  ByVal cbString As Long, lpSize As Size) As Long
     
    Public Sub ResizeColumns(hdc As Long, flexgrid As MSHFlexGrid)
     
        Dim idxRow As Long, idxCol As Long, lngMax As Long
        Dim texte As String, taille As Size
     
        With flexgrid
            'Parcoure les colonnes
            For idxCol = 0 To .Cols - 1
                lngMax = 0
                'Parcoure les lignes
                For idxRow = 0 To .Rows - 1
                    texte = .TextMatrix(idxRow, idxCol)
                    'met la taille du texte de la cellule en pixels dans taille
                    'GetTextExtentPoint32 hdc, texte, Len(texte), taille
                    GetTextExtentPoint32 hdc, 35, 35, taille
                    'lngMax est la longueur du texte le plus long dans cette colonne
                    If taille.cx > lngMax Then lngMax = taille.cx
                Next
                'met lngMax en twips en ajoutant 10 pixels pour les marges
                If lngMax > 0 Then lngMax = (lngMax + 10) * Screen.TwipsPerPixelX
                'Applique la largeur de colonne si besoin
                If lngMax > .ColWidth(idxCol) Then .ColWidth(idxCol) = lngMax
            Next
        End With
     
    End Sub
    J'espère que cela peut t'aider.

    Cdt
    Over
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  3. #3
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Salut

    En me baladant sur un forum concurant j'ai vu la solution que tu cherchais
    j'ai pensé a toi et te la poste.


    Description

    Cliquez pour voir la capture en taille normale
    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
          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
    Auteur : PROGRAMMIX




    Over
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

Discussions similaires

  1. [Toutes versions] Que mettre dans une cellule pour que estvide soit vrai
    Par jack-ft dans le forum Excel
    Réponses: 6
    Dernier message: 04/09/2012, 05h53
  2. [XL-2007] Mettre dans une cellule le contenu de la propriété Titre
    Par soazig dans le forum Excel
    Réponses: 3
    Dernier message: 24/11/2010, 11h07
  3. mettre dans une cellule de JTable un autre JTable
    Par gharras dans le forum Composants
    Réponses: 4
    Dernier message: 31/12/2009, 10h47
  4. Réponses: 2
    Dernier message: 17/11/2008, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo