XL 2019 Molette Scroll sur ListBox

gg13

XLDnaute Occasionnel
Bonjour,

Je commence un nouveau projet pour lequel je devrai utiliser des ListBox et ComboBox.
Ces listes seront longues et je voudrais utiliser le scroll de la molette plutôt que les ascenseurs.

Après renseignement sur le site j’ai voulu utiliser ce post :
Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulette)

Je galère depuis 2 jours et malgré plusieurs essais je n’arrive pas à intégrer ces différentes macros, plusieurs messages d’erreurs ….
Je ne comprends pas tout.
Si vous pouvez m’aider un peu je vous remercie d’avance.

Je joins le fichier exemple avec les listBox .

GG13
 

Pièces jointes

  • NBA1.3.xlsm
    37.6 KB · Affichages: 9

Dudu2

XLDnaute Barbatruc
ben met un unhook au move du parent c'est tout
Oui je comprends ce que tu veux faire.

Mais ça m'ennuie de devoir mettre des UnHook. Le UnHook doit se faire tout seul à la sortie de la zone directement dans la fonction de Hook qui appelle la fonction de positionnement pour à chaque fois savoir si elle doit continuer ou stopper le Hooking.
D'ailleurs le UnHook se fait. Mais c'est ma zone qui semble décalée. Faut que je vérifie. Mais là j'ai pas trop le temps.
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Dudu2
je fouille dans mes vieux truc et ...je retrouve des truc que j'avais complètement zappé
et si je te proposais de savoir zoner le rectangle de la listbox en pixel ?
1°connaître directement le handle de la listbox
2°déterminer le rectangle avec la même api "getwindowrect"
3° tu pourrais contrôler simplement la position avec getcursorpos
 

patricktoulon

XLDnaute Barbatruc
dans cet exemple j'ai deux listbox dans le userform
au move de celles ci de détermine leur handle et leur le rect
dans cet exemple je me sert aussi du move du userform (c'est juste pour l'exemple)
mais le changement se fait grace au rect et getcursorpos

comme dans la fonction en adressof pour la molette cette fonction tourne tant que on l’arrête pas ben tu met ca dans celle ci
et voilà tu n'a plus besoins du parent move
les seuls move sont celle des listbox qui le démarre
et le unhook seulement s’appellera dans la fonction de hook (c'est rigolo non)
userform de démonstration pour déterminer les rect des listbox

je t'ai fait ca vite fait mais le principe est là
 

Pièces jointes

  • test handle Rectangle listbox.xlsm
    17.2 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
ca y est je l'ai adapté a mon model mollete (listebox frame combobox) et ca match pour les listbox et frame
sauf pour la combobox bien évidemment car le rectangle qui est donné donne le rectangle(combo non développé) çà c'est dommage
il faut soit exepter les combo soit rectifier le rectangle( le bottom )par listrow*font.size*1.25
 

Dudu2

XLDnaute Barbatruc
Nan, laisse tomber la question, j'ai peut-être une solution car je passe par un Public Function du UserForm pour l'afficher et donc dans cette fonction je connais le Handle qui l'appelle.
De toutes façons, les Parents des UserForms qui s'empilent c'est toujours l'application Excel, jamais le UserForm de niveau précédent.
 

Dudu2

XLDnaute Barbatruc
ok je vais faire ça.
Au moment de l'appel de la fonction publique, je capte le Handle de l'appelant et dans l'activate du Usf2 je le définis comme parent.
Si l'appelant est la Window, ça restera la Window.
Si c'est le Usf1, il deviendra le parent au lieu de la Window.

Mais j'ai des comportements très étranges car différents. Car jusque maintenant ça marchait sans que je fasse rien et maintenant non. Ça vient d'arriver là, sur un nouveau UserForm ! Et les anciens fonctionnent.
 

Dudu2

XLDnaute Barbatruc
Le Usf2 il accepte pas de passer de passer sous le Usf1.
Là je suis bien dans la m... Toute mon appli est basée sur ces outils. Une grosse appli.
Et là bizarrement un truc se dérègle dans les retour de UserForm et je suis bloqué.

Demain je vais essayer de réduire le problème dans un fichier pour tester et que tu voies si tu as des idées.
 

Dudu2

XLDnaute Barbatruc
J'ai un petit espoir avant d'aller dormir !
il SEMBLE qu'un truc comme ça à la fin de la Fonction Publique fonctionne et ne fasse plus d'interruption (il faut dire que j'utilise souvent ESC pour sortir des UserForm et là j'ai dû collisionner).
VB:
    'Activate le Caller
    Application.EnableCancelKey = False
    SetForegroundWindow MsgBoxPerso_CallingHandle
    Application.EnableCancelKey = True
Je touche du bois et je verifierai demain.
 

Statistiques des forums

Discussions
312 361
Messages
2 087 599
Membres
103 604
dernier inscrit
CAROETALEX59