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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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
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