Autres toutes versions tester le scrool avec la roulette sans passer par un hooking en addressof

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
la principal raison des crash excel quand on utilise le hooking de la souris pour avoir le mouse wheel(la roulette)
c'est que le looping avec le (CallnextHook)est asynchrone avec le captage du message de la souris
donc quand une erreur se produit(on va trop vite ou autre)
le looping lui continue parfois au moins une fois même en erreur
résultat comme on déplace le block type du message en mémoire ça crash

je vous propose de tester ceci
ici on va rester dans un do/loop vba classique et le message de la souris sera récupéré par un peekmessage
si il y a une erreur (du au message de la souris non conforme) normalement on a une erreur vba classique
et donc le do/loop est interrompu
donc pas de relance avec un message de la souris erroné donc pas de crash
Vous constaterez que j'augmente l'allocation de la mémoire aussi (64 bits double (longlong ou longPtr))(+2&)

d'autant plus que la dans cette démo je met tout dans le userform
ce qui n'est pas possible avec un code de hooking bien entendu
et ça peut avoir un avantage lorsque l'on veut distribuer un interface(userform) sans devoir l'accompagner de x modules

toujours pareil pour déterminer le rectangle je me sert de ma fonction perso du calendar que j'ai modifié pour ce besoins
donc testez et si ça fonctionne je ferais une ressource au propre

merci d'avance pour votre participation

j'en connais un qui vas ouvrir grand les yeux 🤣

Patrick
 

Pièces jointes

Solution
Bonjour @jurassic pork , @Dudu2 , @Nathe
j'ai mis le controlrelease en optionnel dans la démo (fonctionne aussi dans userform)
j'en ai profité pour mettre un multipage
et dans la page 1 du multipage j'ai mi un label violet
et c'est lui qui pilote le scroll de la page
comme ca on peut mettre un fond sur chaque page vu que ce control n'a pas de propertie backcolor
bien évidemment j'ai ajouté le textbox
dans cette démo donc on a le controlrelease optionnel
et le scroll piloté par un autre control
voila comme ça on est au même niveau que la V 3.0 avec iaccessible (All control working)

patrick
Un bémol... Une TextBox en Frame et en MultiPage scrollés n'est même pas détectée par le MouseMove !
On pourrait remédier à ça en Scroll de Frame et de MultiPage en détectant les TextBox filles et en conservant leur RECT puis vérifiant si le curseur vient dans un de ces RECT pour scroller la TextBox. Ce n'est pas énorme. Je vais peut-être le faire mais ça va ajouter de la complexité au code.
 
Ici Scroll ListBox & ComboBox & TextBox (ActiveX & UserForm).
Un bémol, je n'arrive pas à trouver la Handle de la Window de la TextBox de UserForm. WindowFromPoint retourne le Handle du UserForm. Donc le Scroll de la TextBox UserForm est actif même si on n'est plus dedans.

Je pourrais corriger ça en récupérant le RECT de cette TextBox et sortir si le curseur n'est plus dedans. A voir.

Re, toujours le même souci si on redimensionne pas la forme
Capture d’écran 2025-03-17 154701.jpg

Nathe
 
@Nathe,
Re, toujours le même souci si on redimensionne pas la forme
Ce phénomène de pur affichage que je n'ai pas hélas pour le débugger me laisse coi.
Je me demande si ce n'est pas lié au fait que tu utilises mon fichier directement. Peut-être faudrait-il sous ton environnement recréer la ListBox1 ?

Ça vient à quel moment ? Dès que tu fais un Scroll ?
 
1- Sur la feuille avec les forms ça fonctionne, mais la page en elle même ne défile pas du tout vers le bas ou le haut, je sais pas si vous avez testé ce point.
2- Dans l'userform, la frame ça fonctionne pas.
Nathe
Nathe , j'ai constaté la même chose. A mon avis patricktoulon à limiter la scrollArea à la zone visible du départ si bien qu'on ne peut plus aller ailleurs sur la feuille. Il a du faire cela pour éviter le phénomène que tu avais dans ton post précédent.
Pour la Frame c'est le listbox qui est dedans qui ne scrolle pas.
 
@Nathe,
Ce phénomène de pur affichage que je n'ai pas hélas pour le débugger me laisse coi.
Je me demande si ce n'est pas lié au fait que tu utilises mon fichier directement. Peut-être faudrait-il sous ton environnement recréer la ListBox1 ?
Chez moi cela ne le fait pas non plus (excel 2021 64 bits Mise à l'échelle 125%) . Ce qui est louche c'est que sur la capture d'écran de Nathe, il y a un scroller horizontal dans la ListBox. La listbox n'est pas assez large ?
 
re
non jurassic pork là elle est en train de tester celui de dudu2
donc ça n'a rien a voir avec moi

bon on est parti ou là
on discute de quoi? de la version de dudu ou les miennes
franchement je ne sais plus ou je suis là
faut il que j'ouvre un autre topic pour être tranquille et travailler correctement ? et finir ce que j'ai commencé?
 
Pour la Frame c'est le listbox qui est dedans qui ne scrolle pas.
Oui c'est ça

Je me tue à expliquer que c'est parce que @patricktoulon teste le ClassName du Parent pour savoir s'il en a fini avec un Control (sa variable criter = IsScrollable(control))
Or en passant de la ListBox au Frame ou inversement le criter sera toujours valide (= True) et donc il ne détecte pas le changement de Control.
 
Pour le problème de Nathe avec le classeur de dudu2 voir le post #30 (page 2) de patricktoulon, cela ressemble au même problème.
Sinon un truc à vérifier c'est la version de FM20.dll qui se trouve normalement dans c:\windows\system32 ou c:\windows\syswow64
ou C:\Program Files\Microsoft Office\root\vfs\System (ou System x86) La FM20.dll c'est la dll des contrôles activeX . J'avais un bug en Excel 2007 qui est parti en remplaçant la FM20.dll par une version plus récente.
voici par exemple pour mon Excel 2021 64 bits :
FM20.png
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

P
Réponses
1
Affichages
834
P
Retour