Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modifier taille lors du choix dans Combox ou ListBox

5 réponses
Avatar
RENAUD Eric
Bonjour,
Sous Excel, je peux avoir avec la propriété ListWidth d'une Combobox la
possibilté lors de la sélection d'un élément de la liste, un affichage plus
complet de l'item sélectionné (la largeur d'affichage est plus grane que la
taille de la Combobox.
Existe t'il une astuce pour VB ?
D'avance merci

5 réponses

Avatar
LE TROLL
Salut,

En gros tu veux un liste peu large, qui quand tu sélectionne un élément, ce
dernier ce voit en entièrement (en modifiant ou pas la largeur de la liste?)

Comme je n'ai pas testé mes réponses, c'es sous réserve, mais tu peux
essayer:
-- Par exemple, si c'est accepté, de modifier la largeur de la liste lorsque
qu'un MouseDows est maintenu...
-- De mettre un menu surgissant (popup), qui répond au clique de liste et
affiche le tout...
Etc...

Je vais tester en attendant, vois ce qu'on peut faire :o)
-------------


"RENAUD Eric" a écrit dans le message de news:

Bonjour,
Sous Excel, je peux avoir avec la propriété ListWidth d'une Combobox la
possibilté lors de la sélection d'un élément de la liste, un affichage plus
complet de l'item sélectionné (la largeur d'affichage est plus grane que la
taille de la Combobox.
Existe t'il une astuce pour VB ?
D'avance merci



Avatar
Picalausa François
Hello,

Il est possible de définir la taille de la listbox à l'aide du message
CB_SETDROPPEDWIDTH qui demande une taille en pixels :
Private Const CB_SETDROPPEDWIDTH = &H160
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 Sub SetComboListWidth(Combo As Combobox, Width As Long)
SendMessage Combo.hwnd, CB_SETDROPPEDWIDTH, Width, ByVal 0&
End Sub

On peut en outre déterminer la taille du plus grand texte présent dans la
liste:
(non optimisé)

Private Function GetComboMaxWidth() As Long
Dim ScaledWidth As Single, i As Long, ItemWidth As Single
Dim BorderWidth As Single

'Définit par défaut une liste à la largeur du combobox
ScaledWidth = Combo1.Width

'Compte 8 pixels de bordure pour chaque item dans la liste
BorderWidth = Me.ScaleX(8, 3, Me.ScaleMode)

For i = 0 To Combo1.ListCount - 1
ItemWidth = Me.TextWidth(Combo1.List(i)) + BorderWidth

'Récupère le maximum entre la taille actuelle et la taille de l'item
comparé
If ItemWidth > ScaledWidth Then
ScaledWidth = ItemWidth
End If
Next i

GetComboMaxWidth = Me.ScaleX(ScaledWidth, Me.ScaleMode, 3)
End Function

Voici un exemple d'utilisation des deux méthodes précédentes:
Private Sub Form_Load()
Combo1.AddItem "Un très très très très très très très très très long
texte"
Combo1.AddItem "Un très très très très très très très long texte"
Combo1.AddItem "Un très très très très très long texte"
Combo1.AddItem "Un très très très long texte"
Combo1.AddItem "Un très très très très très très très très très très
long texte"

SetComboListWidth Combo1, GetComboMaxWidth
End Sub

--
Picalausa François

"RENAUD Eric" a écrit dans le message de news:

Bonjour,
Sous Excel, je peux avoir avec la propriété ListWidth d'une Combobox la
possibilté lors de la sélection d'un élément de la liste, un affichage
plus complet de l'item sélectionné (la largeur d'affichage est plus grane
que la taille de la Combobox.
Existe t'il une astuce pour VB ?
D'avance merci



Avatar
Jean-Marc
"Picalausa François" a écrit dans le message de
news:
Hello,



<snip l'excellent code>

Remarquable :-) Je le garde en réserve, c'est excellent.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
RENAUD Eric
Merci à tous c'est parfait.
Salutations
Eric
"RENAUD Eric" a écrit dans le message de news:

Bonjour,
Sous Excel, je peux avoir avec la propriété ListWidth d'une Combobox la
possibilté lors de la sélection d'un élément de la liste, un affichage
plus complet de l'item sélectionné (la largeur d'affichage est plus grane
que la taille de la Combobox.
Existe t'il une astuce pour VB ?
D'avance merci



Avatar
hken
Bonjour à tous et à toutes.
Alors voilà une petite question.
J'utilise le code que tu as donnés pour développer la largeur de la ComboBox
(dropBox), ça fonctionne parfaitement. Mais connais-tu une manière de choisir
soit un développement à gauche sous à droite de cette dropbox ???
Comme le fait Windows sur un click droit trop proche de la bordure de
l'écran. Si pas assez de place à droite... il le fait à gauche !!!
Merci d'avance à ceux et/ou celles qui me répondront...

--
Merci d''avance pour vos réponses !!