Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 10

Dudu2

XLDnaute Barbatruc
J'ai une autre idée.
Car une caractéristique essentielle de toutes les ComboBoxes dans la feuille (ActiveX, UserForm) c'est qu'il ne peut en y avoir qu'une seule qui est déployée, car tout déploiement d'une autre ComboBox qui se fait par un Clic, rembobine celle qui était éventuellement déployée.

Et ça, ça vaut de l'or !
 

patricktoulon

XLDnaute Barbatruc
c'est par ce que j'ai mis 0 si handlechild retourné identique au handle combo
regarde bien ce qui est retrouné quand j'enleve la condition que j'ai mis pour zero
regarde si j'enleve ma condition "0")
'If handleparent <> handleChild Then GetHandleDropDownWindow = handleChild
donc
GetHandleDropDownWindow = handleChild

regarde bien a aucun moment j'ai le handle de la frame3
regarde bien les textboxs!!!!!!!!!!!
pas developpée j'ai deux handle identique (celui de la combobox)
développé j'ai le handle child
mais jamais celui de la frame3!!!!!!!!



je te l'ai expliqué hier quand je t'ai donné la fonction dropdownstate
 

patricktoulon

XLDnaute Barbatruc
et ben quoi ?? ça me donne le handle de la combo qui est developpé c'est tout

d’après toi pourquoi je te bombarde depuis des plombes d'utiliser le mouse up

le mouse up te donne une fois son resultat de windowfrom point ET BASTA
et le mouse up tu le fait quand hein???? ben quand tu est sur le dropbutton
dans la child ya pas de mouseup


quand je te dis que le combobox a un comportement particulier

d’après toi le décrochage a l'item 7 ça correspond à quoi ?????

ben je te le dis
le listrows d'origine qui est égal à 8 - le height de la combo (soit un item)
terminé
 

Dudu2

XLDnaute Barbatruc
Arrête de me donner des leçons sur ce qu'il faut faire parce que tu le fais.
Le MouseMove est un Event VBA de la ComboBox et ce n'est pas parce que tu utilises MouseUp que tout le monde doit faire pareil.

Ton code de détection de la Window du DropDown ne fonctionne pas.
Car en 7 et 8 tu crois détecter le Handle de la ComboBox1Child mais tu détectes le Handle de la ComboBox2.
Donc tu en conclues que tu n'es PAS dans la ComboBox1Child puisque tu as un Handle en dessous.
Après si tu ne veux pas l'admettre...
 

Dudu2

XLDnaute Barbatruc
Prends mon fichier où la ComboBox2 est hors de la zone du DropDown ComboBox1.
Et passe sur 7 et 8.


Pas ton fichier où la ComboBox2 est couverte par la zone du DropDown ComboBox1.

AAAHHHHHH MAIS ALORS !
 

patricktoulon

XLDnaute Barbatruc
allez rebelotte
ahh mais que t il donc !!!?????
c'est normal que le rangefrompoint x,y) te donne le 2 les chilcd n'ont pas de hdc
en gros si je puis m'exprimer ainsi le curseur voit a travers la child dépliée
mais l'item 7 te redonne bien le handle de la combo 1 à la place du handle child
et c'est ce handle2 qui nous intéresse
et c'est pour ca que j'utilise le mouseup pour l'avoir une bonne fois pour toute pendant l'affichage du child
forcement quand tu est déplié le move continue meme si tu est au dessus de la child
donc mon rangefrompoint(x,y) qui est là pour me donner le handle de la combo va changer forcement puisque tu bouge
et pareil pour le rangefrompoint(x,y+le height combo en pixel)qui est sensé me donné le handle juste en dessous la combo
mais si tu le fait dans le move ça veut plus rien dire seule alors le rangefrompoint(x,y) compte

conclusion avec le mousemove tu est OUT!!!!!


maintenant le meme avec le code dans le mouseup
je continu encore le copier coller ou tu en a assez ?
 

Dudu2

XLDnaute Barbatruc
Prends mon fichier où la ComboBox2 est hors de la zone du DropDown ComboBox1.
Et passe sur 7 et 8.
Ah ben non, ça veut toujours pas passer sur 7 & 8 !
Bon la plaisanterie a assez duré. Je perds du temps car trouver ces foutues ComboBox en UserForm, c'est pas de la tarte. Je suis dans le bleu car mes tests donnent des résultats étranges sur les Handles.
Je vais creuser pour analyser plus en détail ces Windows. Mais ça va prendre du temps.
 

patricktoulon

XLDnaute Barbatruc
ben en fait c'est toi qui veux pas comprendre


oui le move donne un handle et un rectangle suspect ca c'est sur et pour cause tu bouge
sur des fenêtre sans HDC la bonne blague

tu veux la preuve A+B absolue que les child n'ont pas de HDC et que l'ont voit a travers
 

Dudu2

XLDnaute Barbatruc
Non, je ne veux plus rien. Je sais que cette approche fonctionne dans la plupart des cas mais pas dans tous.
De plus ce n'est pas très "carré" comme méthode, c'est de l'approximation.
Alors si tu es convaincu du contraire, ça me va et ça ne m'intéresse plus d'en discuter.
 

patricktoulon

XLDnaute Barbatruc
allez une petite dernière non pas pour te montrer ma méthode ca on s'en fou
juste pour te montrer que dans certaines condition a l'inverses de fenêtres classiques qui ont un HDC
on ne peut pas avoir accès à tout
et c'est le cas avec le combo qui je le repete ;a une programation interne très très très particuliere

alors voilà j'ai ajouté ceci dans la routine lowlevelproc(la proc de hooking)
Set obj = ActiveWindow.RangeFromPoint(pos.X, pos.Y)
If TypeName(obj) = "Range" Then [b3] = obj.Address
If TypeName(obj) = "OLEObject" Then [b3] = obj.Name

regarde bien la case rose quand je passe sur les controls (les parent s) et quand je passe sur les childs
qu'est que ça lit dessus le child ??????????????
après ça si tu persiste sache qu'il y en a beaucoup d'autres qui s'y sont collés avant toi

et pour info il n'y a aucune approximation dans mon module c'a match au millimètre près

allez démo

la si tu pige pas mon ami je ne peut plus rien
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…