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
néanmoins POUR LA COMBOBOX!!
comme je n’ai pas de moyen de détecter si elle est développé
Il y a un moyen simple que j'ai déjà indiqué: (mais tu ne lis pas mes posts)
Si le ComboBox.TopIndex = -1 elle n'est pas développée (pas de DropDown)
Sinon elle est développée !

Donc si TypeName(Control) = "ComboBox" alors si Control.TopIndex = -1 alors la ComboBox n'est pas développée.
Pas besoin de ClassName ni de Handle !
 
RE
si je l'ai vu mais je ne voulais pas copier sur toi
mais c'est vrai ça fonctionne aussi bien


d'autant plus que dans cette version 4.0 la seule chose qui se met en travers le peekmessage c'est le if not criter
qui teste un rectangle mémorisé avant !!!dans IsScrollable le do/loop
qui arrête le scroll sinon le do/loop est libre avec son peekmessage
ce qui a pour effet d 100% de vélocité possible

contraire ment au autres version qui par IsScrollable testait un rectangle dynamique uiauto donc plus de code de test donc plus long (même si c'est une chtouille)

Incroyable quand je pense que pendant des années on est aller chercher le hook
😉
c'est vraiment dommage que l'on ai ce soucis avec les listbox sur feuille entre versions (Win/office)
 
Dernière édition:
si je l'ai vu mais je ne voulais pas copier sur toi
Ce n'est pas se rabaisser que de prendre ce qui marche chez les autres. Je dirais même au contraire.
Quand il y a des trucs qui me plaisent chez toi ou JP ou autre, je n'hésite pas à me les "approprier".

Pour info je bataille avec le Zoom du UserForm pour trouver les RECT des Controls.
Y a un énorme bug sur le UserForm.InsideWidth/Height quand le zoom n'est pas 100. Il faut le passer à 100 temporairement.
Pour l'instant je n'y suis pas du tout et je rame ! Mais je suis pas loin.
 
Moi je serais curieux de savoir si il y a beaucoup de gens qui utilisent des activeX ListBox dans leurs feuilles car cela ne me semble pas indispensable :
Les ComboBox sont plus ergonomiques et il y a aussi dans les cellules les listes de choix
Trouvez moi un classeur où la listbox activex s'impose.
 
@jurassic pork, c'est sûr que c'est plutôt rare, mais l'idée c'est de tout gérer. Satisfaction intellectuelle
1742645368201.gif
!

Pour cette version sans UIAutomation, dans la fonction de récupération du RECT d'un Control de UserForm j'avais fait l'impasse sur le Zoom du UserForm. Pas bien !

- GetActiveXControlRECT
- GetUserFormControlRECT <- Gère maintenant le Zoom du UserForm
 

Pièces jointes

@Dudu2
Pour info je bataille avec le Zoom du UserForm pour trouver les RECT des Controls.
Utiliser accHitTest de IAccessible pour tester si un point en cordonnés de l'ecran est dans la zone du contrôle, ou accLocation qui renvoie les cordonnées du contrôle en pixels .

@jurassic pork
Moi je serais curieux de savoir si il y a beaucoup de gens qui utilisent des activeX ListBox dans leurs feuilles car cela ne me semble pas indispensable

La technologie COM, ActiveX est abandonné par microsoft ça fait bien longtemps son utilisation était toujours déconseillée pas uniquement pour les raisons de secrété mais microsoft a introduit un remplaçant le framework .net
 
petite correction pour le multipage
ensuite a bien y réfléchir j'ai supprimé l'object userform de l'équation car
en effet si je ne suis pas sur un control je suis soit dans le userform ou ailleurs
mais le curseur dans le périmetre du userform implique ca tourne tout le temps
je ne sais pas ce que vous en pensez vous me direz
 

Pièces jointes

@Rheeem,
Justement l'idée dans cette version c'est de ne pas utiliser UIAutomation à cause des vapeurs d'Excel 2013.
Si j'ai effectivement ramé, c'est maintenant réglé pour le RECT d'un Control d'un UserForm zoomé.

@patricktoulon
Alors ça marche bien (j'ai eu des erreurs de bibliothèque assez étranges) sur les [B1], [C1], [D1] que j'ai dû préfixer par ActiveSheet.
Concernant les Combox DropDown, tu utilises la Font.Size avec un facteur 1.2.
J'avais un peu creusé et j'étais arrivé à .FontSize * .ListRows + .FontSize * (.ListRows - 1) * 0.2 + .FontSize * 2 * 0.16
mais sur les très grosses ou très petites y a toujours un delta.
J'ai utilisé le WindowFromPoint() à partir du Bottom + 5 du Control ComboBox normal. Le résultat est alors 100% correct.
 
@patricktoulon
Alors ça marche bien (j'ai eu des erreurs de bibliothèque assez étranges) sur les [B1], [C1], [D1] que j'ai dû préfixer par ActiveSheet.
Les erreurs de bibliothèques j'ai eu ça aussi c'est parce que Patricktoulon a laissé traîné dans les références de son classeur un Microsoft calendar ( Manquant à décocher). Par contre dans le formulaire cela ne fonctionne pas du tout chez moi (on dirait que les coordonnées sont affichées à chaque mousemove) en Excel 2016 32 bits Windows 11 1920x1080 M à l'échelle 100% :
bugV4.gif


Ce qui est étonnant c'est que ça fonctionne si je mets une mise à l'échelle de 125%.
 
Re
chez Moi c'est l'inverse Lol
j'ai le Zoom sur la ListBox de Feuille !
mais dans le Userform tout va bien !
si je scroll sur le Combobox et qu'ensuite je vais scroller sur la Feuille , la Liste du Combobox reste en bas de page Lol
Merci a Vous
jean marie
 

Pièces jointes

  • Patrick-2.gif
    Patrick-2.gif
    350.4 KB · Affichages: 3
Dernière édition:
a c'est possible que mes xlam activer manquent
c'est normal quand on enregistre un classeur après modif il enregistre les refs et comme vous les avez pas.......
les avaluate abrégées effectivement sur certaines version ca fait des trucs rigolos
bloquez les lignes et testez tout simplement
ces ligne seront supprimées de toute façons

mais comme vous voyez je fait tout dès le premier mouse move ou changement de control
le reste se fait dans le simple test du rectangle
ce qui allège grandement le do/loop
il n'y a pas d'interférences avec des test trop long ou gourmands

disons que c'est une alternatives pour les pcs qui sont pauvres en librairie ou librairie bloquées (pc pro)
 
- 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
801
P
Retour