OVH Cloud OVH Cloud

Ascenseur horizontal dans ListBox

2 réponses
Avatar
Gloops
Bonjour tout le monde,

J'ai pu écrire dans une ListBox en plusieurs colonnes grâce au modèle
http://www.mvps.org/vbvision/_samples/Listbox_Columns_Demo.zip
(disponible sur http://www.mvps.org/vbvision/Sample_Projects.htm).

Qu'un petit souci : alors que l'ascenseur vertical apparaît
automatiquement lorsque le nombre d'enregistrements le rend nécessaire,
même si l'affichage du contenu dépasse la largeur du contrôle ListBox,
je ne vois pas d'ascenseur horizontal, et parcourir la liste des
propriétés ne m'a pas fait sauter aux yeux la façon de le faire apparaître.

Dans les newsgroups est proposé d'utiliser ListView plutôt que ListBox,
par le fait je me suis rendu compte que le ListBox de Forms gère un
ascenseur horizontal, mais il faut reprendre le contenu pour la
séparation des colonnes. ListView ne paraît pas aussi adapté au premier
coup d'oeil, il est vrai que je n'ai pas passé beaucoup de temps dessus.

Voilà, donc au départ ma question c'est comment faire apparaître un
ascenseur horizontal dans un ListBox ?

2 réponses

Avatar
MPi
Gloops a écrit :
Bonjour tout le monde,

J'ai pu écrire dans une ListBox en plusieurs colonnes grâce au modèle
http://www.mvps.org/vbvision/_samples/Listbox_Columns_Demo.zip
(disponible sur http://www.mvps.org/vbvision/Sample_Projects.htm).

Qu'un petit souci : alors que l'ascenseur vertical apparaît
automatiquement lorsque le nombre d'enregistrements le rend nécessaire,
même si l'affichage du contenu dépasse la largeur du contrôle ListBox,
je ne vois pas d'ascenseur horizontal, et parcourir la liste des
propriétés ne m'a pas fait sauter aux yeux la façon de le faire apparaître.

Dans les newsgroups est proposé d'utiliser ListView plutôt que ListBox,
par le fait je me suis rendu compte que le ListBox de Forms gère un
ascenseur horizontal, mais il faut reprendre le contenu pour la
séparation des colonnes. ListView ne paraît pas aussi adapté au premier
coup d'oeil, il est vrai que je n'ai pas passé beaucoup de temps dessus.

Voilà, donc au départ ma question c'est comment faire apparaître un
ascenseur horizontal dans un ListBox ?




Place ce code dans un module
et appelle la fonction AddScroll une fois que la liste est remplie


Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Public Const LB_SETHORIZONTALEXTENT = &H194

Public Sub AddScroll(List As ListBox)

Dim i As Integer, intGreatestLen As Integer, lngGreatestWidth As Long

'Trouver le plus long texte dans la Listbox
For i = 0 To List.ListCount - 1
If Len(List.List(i)) > Len(List.List(intGreatestLen)) Then

intGreatestLen = i

End If

Next i

'Space(1) pour empêcher le dernier caractère d'être coupé
lngGreatestWidth = List.Parent.TextWidth(List.List(intGreatestLen)
+ Space(1))

'Convertir en Pixels
lngGreatestWidth = lngGreatestWidth Screen.TwipsPerPixelX

'Utiliser l'API pour ajouter la scrollbar
SendMessage List.hwnd, LB_SETHORIZONTALEXTENT, lngGreatestWidth, 0

End Sub

Michel
Avatar
Gloops
Salut,

Le 16 octobre, comme il n'y avait pas de réponse j'ai commencé à
désespérer un peu de cette question, alors j'ai lancé un nouveau fil
intitulé "ListBox : on sèche ?"

Jean-Marc a répondu et à présent ma liste a un bel ascenseur horizontal
qui fonctionne très bien, merci. Peut-être aurais-je dû faire signe ici.

A cette occasion les séparateurs de colonne n'apparaissent plus.
Peut-être est-ce inévitable ? Il est vrai que leur position est codée
explicitement, alors si il faut les repositionner à chaque défilement de
la liste, ça risque de ne pas être de la tarte.
__________________________________
MPi a écrit, le 21/10/2004 10:46 :


Place ce code dans un module
et appelle la fonction AddScroll une fois que la liste est remplie


Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Public Const LB_SETHORIZONTALEXTENT = &H194

Public Sub AddScroll(List As ListBox)

Dim i As Integer, intGreatestLen As Integer, lngGreatestWidth As Long

'Trouver le plus long texte dans la Listbox
For i = 0 To List.ListCount - 1
If Len(List.List(i)) > Len(List.List(intGreatestLen)) Then

intGreatestLen = i

End If

Next i

'Space(1) pour empêcher le dernier caractère d'être coupé
lngGreatestWidth = List.Parent.TextWidth(List.List(intGreatestLen) +
Space(1))

'Convertir en Pixels
lngGreatestWidth = lngGreatestWidth Screen.TwipsPerPixelX

'Utiliser l'API pour ajouter la scrollbar
SendMessage List.hwnd, LB_SETHORIZONTALEXTENT, lngGreatestWidth, 0

End Sub

Michel