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 :

VB msflexgrid multiligne


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 14
    Points
    14
    Par défaut VB msflexgrid multiligne
    Bonjour,
    je souhaite utiliser un controle msflexgrid avec un mode multiligne.
    Je souhaite que lorsque un retour à la ligne est activée dans une cellule, la hauteur de la cellule s'adapte.
    Comment faire ?

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Je viens juste d'effectuer ce petit test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Dim HautLigne As Long
     
    Private Sub Command1_Click()
    MSFlexGrid1.RowHeight(1) = MSFlexGrid1.RowHeight(1) + HautLigne
    End Sub
     
    Private Sub Form_Load()
    HautLigne = MSFlexGrid1.RowHeight(1)
    End Sub
    En espérant que ça poura te servir.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 14
    Points
    14
    Par défaut vb msflexgrid multiligne
    Bonjour,
    je te remercie pour ce bout de code mais le probleme n'est pas ici.
    La question est de savoir combien de retours à la ligne ont été fait (la propriété wordwrap sur true). En effet, je sais comment modifier la hauteur de ligne mais je ne sais pas de combien je dois la modifier.
    Merci pour votre aide

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Juste une idéé (pas testé)

    1 - Compte le nombre de caractère dans ta ligne
    2 - S'il dépasse une valeur augmente la hauteur de ta ligne

    et comme ton Wordwrap est à true


    Starec

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 14
    Points
    14
    Par défaut VB msflexgrid multiligne
    Je te remercie de cette réponse.
    Néanmoins, je l'ai déjà essayé et les résultats ne sont pas concluant car chaque caractère à sa propre largeur qui dépend de la police utilisée.
    Ainsi, il faudrait une méthode plus systématique

    Merci de m'aider

  6. #6
    New
    New est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 43
    Points
    43
    Par défaut
    J'ai dû faire ça au boulot, voici donc ce que j'ai fait :

    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
    48
     
    Private Function AjustRow(myGrid As MSHFlexGrid, _
                                    Optional ByVal lFirstRow As Long = -1, _
                                    Optional ByVal lLastRow As Long = -1, _
                                    Optional bCheckFont As Boolean = False)
     
      Dim lCol As Long, lRow As Long, lCurCol As Long, lCurRow As Long
      Dim lCellHeight As Long, lRowHeight As Long
      Dim bFontBold As Boolean
      Dim dFontSize As Double
      Dim sFontName As String
     
      With myGrid
        If bCheckFont Then
          lCurCol = .Col
          lCurRow = .Row
        End If
     
        If lFirstRow = -1 Then lFirstRow = 1
        If lLastRow = -1 Then lLastRow = .Rows - 1
     
        For lRow = lFirstRow To lLastRow
     
          lRowHeight = 0
          If bCheckFont Then .Row = lRow
          For lCol = 0 To .Cols - 1
            If bCheckFont Then
              .Col = lCol
              UserControl.TxtTemp.FontBold = .CellFontBold
              UserControl.TxtTemp.FontName = .CellFontName
              UserControl.TxtTemp.FontSize = .CellFontSize
            End If
            UserControl.TxtTemp.Width = .ColWidth(lCol)
            UserControl.TxtTemp.Height = .RowHeight(lRow)
            UserControl.TxtTemp.Text = .TextMatrix(lRow, lCol)
            lCellHeight = (UserControl.TextHeight("Wg") * SendMessage(TxtTemp.hwnd, EM_GETLINECOUNT, 0, ByVal 0&))
            If lCellHeight > lRowHeight Then lRowHeight = lCellHeight
          Next lCol
          .RowHeight(lRow) = lRowHeight + (UserControl.TextHeight("Wg") / 2)
        Next lRow
     
        If bCheckFont Then
          .Row = lCurRow
          .Col = lCurCol
        End If
      End With
     
    End Function
    alors,

    remplacer UserControl par le nom de la fenêtre (pour laquelle tu as configuré la même police que dans ton spread). Au fait j'utilise cette fonction dans un contrôle OCX programmé moi-même.

    il te faut donc un FlexGrid et un contrôle Text > TxtTemp (tu mets la propriété visible à false)


    + des déclarations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
        hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long
     
    Const EM_GETLINECOUNT = &HBA

    PS: l'idée de base a été trouvée sur un site (je ne sais plus ou exactement sinon j'aurai volontier donné l'adresse)

    Normalement tout y est

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    En complément de la solution proposée, je signale juste que dans la FAQ, il y a un petit article intéressant pour tous ceux qui voudraient se casser la tête sur des problèmes d'ajustement de taille de contrôles en fonction du texte et de la police :

    http://vb.developpez.com/faq/?page=G...e#taille_texte
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 23
    Points : 14
    Points
    14
    Par défaut vb msflexgrid multiligne
    Bonjour et merci à tous pour vos réponses.

    J'ai trouvé sur le forum de microsoft, une astuce interressante.

    On utilise un label invisible avec les mêmes font que la grille et la meme largeur que la cellule.
    Ce label a la propriété wordwrap et la prop autosize sur true.

    Il suffit alors de copier dans ce label le texte de la cellule, puis de récupérer la hauteur du label pour l'appliquer à la cellule

    Voila

Discussions similaires

  1. StringGrid, multiligne et word wrap
    Par Dajon dans le forum C++Builder
    Réponses: 7
    Dernier message: 17/09/2003, 17h15
  2. [MSFlexGrid] problème générale
    Par Guigui_ dans le forum MFC
    Réponses: 5
    Dernier message: 30/07/2003, 18h03
  3. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  4. [VB6] Multiselection avec CTRL dans une msflexgrid
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/04/2003, 10h57
  5. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56

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