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

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
je vous expose ma vision pour la V 4

sub mouse wheel
on capte le control et si ce nest pas l'actualcontrol alors il le devient
on capte le rectangle
ma fonction issue du calendar(sans api)
ou pour les feuille la fonction que j'utilise actuellement en corrigeant la pane
on lance le do/loop
dans le do loop le criter(il ne faut pas sortir du rectangle )
sauf pour la combobox qui doit nous renvoyer le accrole 33 avec Iaccessibleobjectfrompoint
on fait le peek message
si on sort de ca on arrête le do loop
terminé
ça nous dédouanerait du passage entre deux control dont un peut être non géré
puis la condition serait le rectangle + le accrole de l'object Iaccessible uniquement pour la combo bien sur

voila vous me direz ce que vous en pensez
en gros on fait les choses a l'envers
au lieu de accRole+rectangle on fait rectangle+ eventuellement accRole pour la combo

terminé
 
Patrick, quitte à passer pour un idiot de première, non Je ne sais pas.
Puisque j'y suis, si les comboBox sont dans une frame, c'est traité?
Parce que j'ai testé et ça ne marche pas.
J'ai probablement loupé quelque chose . Soyez indulgent. N'oubliez pas que c'est pour des gens comme moi que vous cassez la tête, et cela je l'apprécie énormément. merci pour nous.
 
Non je l'ai prise sur ma version 2016 32 bits mise à jour ici :
Ok j'ai la même version 16.0.18429.20044 en 64 bits extraite de l'installation Office 2016 64 bits dans C:\Program Files\Microsoft Office\root\vfs\System.
Et la même version 16.0.18429.20044 en 32 bits extraite de l'installation Office 2016 32 bits dans C:\Program Files (x86)\Microsoft Office\root\vfs\SystemX86.
 

Pièces jointes

Dernière édition:
@patricktoulon,
Je ne sais pas où tu en es dans tes versions mais 2 petites remarques pour ton array ActiveX à toutes fins utiles.
1 - Tu utilises Panes(1) donc tu supposes qu'il n'y a pas de fractionnement décalé (je sais que tu as des calculs du Pane d'un objet feuille)
2 - Tu invoques le Zoom dans ton calcul sur control.Width et control.Height alors que .PointsToScreenPixelsX/Y en tient déjà compte.

A noter que si tu mets à jour ta DLL FM20 dans ton Excel 2013, tu auras le RECT avec UIAutomation même pour tous les Controls ActiveX.
En ce qui me concerne, c'est une directive que je donnerai pour ceux qui utiliseraient mon fichier avec du 2013-.
 
Dernière édition:
Maintenant c'est pas clair quand il y a FM20.DLL et FM20ENU et FM20FRA.DLL en répertoire des DLL et laquelle prend la priorité sur les autres.
D'après ce que j'ai constaté les versions d'Excel avant la 2016 vont chercher les DLL dans les répertoires systèmes de windows (C:\windows\system32 ou c:\windows\syswow64) . A partir d'Excel 2016 c'est dans les répertoires de Microsoft Office\root\vfs
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…