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
Bonjour les derviches scrolleurs,

@jurassic pork ,
Bien vue la correction.

Maintenant, au prix d'une dure bataille avec les licences Windows et Office après avoir changé la carte mère (merci Rakuten), j'ai pu récupérer et ré-installer mon Desktop Windows 10 / Excel 2016 64bits / 1920 x 1080 tu ne devrais plus avoir besoin de correction.

A essayer ?
Et aussi pourrais-tu à l'occasion STP vérifier que le Scroll fonctionne dans les ActiveX en Excel 2013 ?
 

Pièces jointes

Dernière édition:
@Dudu2 plus de doublage avec le post#331
par contre ça scroll pas a part la combobox
demo1.gif
 
re
mais j'ai trouvé le moyen de se passer de Uiautomation client aussi
tout du moins reprendre une de mes vielle astuce(que vous connaissez déjà )
je prépare une V 4 avec une nouvelle phylosophie

on va garder le Iaccessibleobjectfrompoint mais pas pour déclencher le scroll

mais je vais corriger quand même la pane dans la v 3
c'est vrai que ça ne ma pas trop préoccupé jusque là
 
J'ai des fonctions qui récupèrent le RECT des ActiveX (et UserForm) sans UIAutomation qui pourraient gérer Office 2013 mais ça m'ennuie de devoir les ajouter au code.

Ou alors je fais une version spéciale 2013, ou plutôt une version spéciale sans UIAutomation.
 
@Dudu2 plus de doublage avec le post#331
par contre ça scroll pas a part la combobox
Hello,
patricktoulon, c'est bizarre parce que moi en win10 excel2013 cela fonctionne :
Dudu2Xl2013.gif


La différence peut-être : j'ai mis la dernière version de FM20.dll disponible à la place de celle d'Excel 2013
[Edit] avec la dernière version de FM20.dll pour excel 2013 cela fonctionne aussi
Ami calmant, J.P
 
@jurassic pork,
Je crois que @patricktoulon est en 32 bits. Si tu es en 64 bits ça peut expliquer la différence.
Ou une différence de version de Windows.

En fait j'ai déjà une version non UIAutomation qui fonctionne pour toutes les versions avec WindowFromPoint() mais le code est évidemment plus long que la version UIAutomation car il inclut la récupération des RECT des TextBox en ActiveX et en UserForm qui ne sont pas accessibles avec WindowFromPoint().
 
@jurassic pork,
Je crois que @patricktoulon est en 32 bits. Si tu es en 64 bits ça peut expliquer la différence.
non non c'est un excel 2013 32 bits
voici toutes mes configs :
Excel 2007 SP3 32 bits Win 7 SP1
Excel 2010 32 bits Win 7 SP 1
Excel 2007 SP3 32 bits Win 10
Excel 2013 32 bits Win 10
Excel 2016 32 bits Win 11
Excel 2019 32 bits Win 10
Excel 2021 64 bits Win 11
 
- 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