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 :

synchroniser 2 scrollbar horizontale sur 2 listbox


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Par défaut synchroniser 2 scrollbar horizontale sur 2 listbox
    Bonjour a tous,

    Voilà j'affiche dans 2 list box 2 fichiers différents sur lesquels je veux voir les diffs. Les listbox ne possède pas de barre dé défilement horizontale donc j'ai tapé ce code pour les avoir :

    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
         Option Explicit
     
          Private Declare Function SendMessageByNum Lib "user32" _
            Alias "SendMessageA" (ByVal hwnd As Long, ByVal _
            wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
          Const LB_SETHORIZONTALEXTENT = &H194
    Function barre_defilement_list(longueur_chaine As Variant)
    Static X As Long
        If X < longueur_chaine / Screen.TwipsPerPixelX Then
            X = longueur_chaine
            If Form_connexion.ScaleMode = vbTwips Then
                X = X / Screen.TwipsPerPixelX  ' if twips change to pixels
                SendMessageByNum Form_connexion.List1.hwnd, LB_SETHORIZONTALEXTENT, X, 0
                SendMessageByNum Form_connexion.List2.hwnd, LB_SETHORIZONTALEXTENT, X, 0
            End If
        End If
    End Function
    je voudrais lorsque je bouge la barre de défilement horizontale de la listbox1 que la barre de défilement horizontale de la list box2 bouge de la meme maniere. comment faire?

  2. #2
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    Bienvenu sur le forum.

    Propriété Value de des barres de défilement
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Par défaut
    c'est à dire. la listbox ne possède pas de propriété value. Comment récupérer l'évènement et la propriété value de la barre de défilement qui est un objet rajouté par le code et non par l'interface.

  4. #4
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    tes barres de defilement doivent avoir un nom d'objet, trouve les et tu aura les propriété Value. une ListBox n'a pas de propriété Value, elle a une propriété ListIndex mais je ne suis pas sur que cela te sois utile.
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  5. #5
    Membre Expert
    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
    Par défaut
    Il me semble cependant que les listBox ont une propriété TopIndex ou quelque chose comme ça. Ça permet de défiler la liste en plaçant l'item spécifié en haut et/ou à gauche du cadre du listBox.

    Edit : programme exemple (résultant de vérifications)
    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
    Private Sub Form_Load()
        Dim i As Integer
        For i = 0 To 20
            List1.AddItem i
            List2.AddItem i
        Next
    End Sub
     
    Private Sub List1_Scroll()
        List2.TopIndex = List1.TopIndex
    End Sub
     
    Private Sub List2_Scroll()
        List1.TopIndex = List2.TopIndex
    End Sub
    En spécifiant un nombre de colonnes sur chacun des composants ListBox, tu peux afficher une barre de défilement horizontale plutôt que verticales.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Par défaut
    je n'ai qu'une seule colonne par listbox. par contre j'ai tapé ceci et j'arrive maintenant à synchroniser mes 2 srollbar horizontale mais lorsque je fais bouger la scrollbar horizontale de la listbox1 , son contenu bouge, la scrollbar de la listbox2 bouge également mais son contenu ne bouge pas. pourquoi?

    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
     Private Type ScrollInfo
       cbSize As Long
       fMask As Long
       nMin As Long
       nMax As Long
       nPage As Long
       nPos As Long
       nTrackPos As Long
     End Type
     
     Private Const SIF_RANGE = &H1
     Private Const SIF_PAGE = &H2
     Private Const SIF_POS = &H4
     Private Const SIF_ALL = (SIF_RANGE Or SIF_PAGE Or SIF_POS)
     Private Const WM_VSCROLL = &H115
     Private Const SB_CTL = 2
     Private Const GW_HWNDNEXT = 2
     Private Const GW_CHILD = 5
     Private Const LOGPIXELSX = 88
     
     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
     Private Const LB_SETHORIZONTALEXTENT = &H194
     
     
    Private Declare Function GetScrollInfo Lib "user32" _
    (ByVal hwnd As Long, ByVal fnBar As Integer, lpsi As ScrollInfo) As Boolean
     
    Private Declare Function SetScrollInfo Lib "user32" _
    (ByVal hwnd As Long, ByVal val As Long, lpsi2 As ScrollInfo, ByVal dessin As Boolean) As Integer
    Dim choix As Boolean
    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
    Private Sub Form_Load()
    Dim affiche As String
    Dim i As Long
    Dim valeur As Long
    Timer1.Interval = 10
    choix = False
    affiche = "list"
    For i = 1 To 250
    valeur = i * 10
    affiche = "la logueur de la chose vaut" & valeur
    List1.AddItem affiche
    List2.AddItem affiche
    Next i
     
    For i = 0 To List1.ListCount - 1
        If TextWidth(List1.List(i)) > Largeur Then Largeur = TextWidth(List1.List(i))
    Next i
    'Affiche une barre de défilement horizontale
    SendMessage List1.hwnd, LB_SETHORIZONTALEXTENT, Largeur, 0
     
    For i = 0 To List2.ListCount - 1
        If TextWidth(List2.List(i)) > Largeur Then Largeur = TextWidth(List2.List(i))
    Next i
    'Affiche une barre de défilement horizontale
    SendMessage List2.hwnd, LB_SETHORIZONTALEXTENT, Largeur, 0
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Timer1_Timer()
     Dim SI As ScrollInfo
     
     SI.fMask = SIF_ALL
    If choix = False Then
        retour = GetScrollInfo(List1.hwnd, SB_HORZ, SI)
        mis_list = SetScrollInfo(List2.hwnd, SB_HORZ, SI, True)
        choix = True
    Else
        retour = GetScrollInfo(List2.hwnd, SB_HORZ, SI)
        mis_list = SetScrollInfo(List1.hwnd, SB_HORZ, SI, True)
        choix = False
    End If
    End Sub

Discussions similaires

  1. ScrollBar Horizontale sur Canvas
    Par macben dans le forum Forms
    Réponses: 2
    Dernier message: 22/02/2012, 04h29
  2. [XL-2003] ListBox et ScrollBar horizontale Indesirable
    Par dev_php51 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2011, 12h17
  3. Réponses: 7
    Dernier message: 12/02/2010, 17h04
  4. Listbox et scrollbar horizontale
    Par sscouby dans le forum Général VBA
    Réponses: 5
    Dernier message: 06/11/2007, 12h07
  5. ScrollBar Horizontale ListBox
    Par Ju2Pom dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/02/2007, 18h56

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