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
crocrocro va être content, ça sent le retour des tontons flingueurs 🤣
french movie GIF
 
allez v 3.0 pour windowfrompoint avec la suppression definitive de copymemory
donc maintenant c'est a tester sur diverses config

@Dudu2 c'est bien beau de vouloir faire avec des controls non concerné mais tu en perd de la fluidité
en tout cas mis a part le problème de doublage de control le scroll marche mais il beaucoup moins fluide
pour le reste j'ai pas testé vu que c'est moins fluide je ne continue pas

v3.0

je vais maintenant travailler sur la sortie quand on entre dans une autre liste qui n'est pas pris en charge
 

Pièces jointes

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.
 

Pièces jointes

Dernière édition:
@jurassic pork ,
Est-ce tu traites de cons ceux qui challengent le code de ton maître à penser ?
J'espère avoir mal compris l'humour de ton post. Sinon ce n'est pas très correct, pour le moins.
Hello Dudu2,
loin de moi cette idée et je rappelle le casting du forum :
En cette année 2024, la Palme d’Or a été attribuée à @Dudu2 , @patricktoulon et @jurassic pork pour le film Les Tontons Flingueurs
Avec dans les rôles principaux :
@patricktoulon (Raoul Volfoni)
@Dudu2 (Fernand Naudin)
@jurassic pork (Maitre Folace)
et celui qui dit
Les cons, ça ose tout. C'est même à ça qu'on les reconnaît

c'est Fernand Naudin 😉
 
A ce stade je ne peux plus rien pour toi !

Errare humanum est, perseverare diabolicum

je ne dois pas parler français moi
1742214789855.png

je te rassure @Dudu2 je veux rien et surtout pas de ton usine a gaz imbuvable ou seul toi t y retrouvera
pour info ta dernière version
1 n'est plus tellement fluide
2 il y a même des ratés dans le rythme du scroll( ce que je voulais surtout éviter) pour ne pas dire 2/3 tour de molette pour rien de temps en temps
3 celui qui a perdu son chat et qui voulait s'en débarrasser ,il est tranquille il est pas prêt de le retrouver

surtout que tu insiste alors que l'on te dit que le sujet est résolu puisque le IAccessible tourne parfaitement bien
et est de loin loin loin meilleur que toute tes propositions et y compris ta source avec hooking
en terme de fonctionnement , de fluidité , et de légèreté
et que ce travail sur windowfrompoint n'est que pure jeu et curiosité

apprend a coder intelligiblement pour ce qui te lise après tu pourra parler

je n'arrive pas à trouver la Handle de la Window de la TextBox de UserForm
allez encore une
depuis quand les controls textbox ActivX ont un handle

pour info tout les textbox d'un userform te donneront le même handle a savoir celui du parent lui même
demo1.gif
 
Dernière édition:
Avec FlaUIAutomation on peut voir les contrôles qui ont des handles de fenêtres.
Voici ce que cela donne pour le formulaire du classeur de test de patricktoulon :
WindowHandleUIA.gif

Pane c'esr le formulaire, List une ListBox, Group une Frame, Slider un scrollbat, Text un Label, Edit un TextBox.
On voit aussi que le ComboBox n'a pas de Handle quand on n'est pas dedans (après un clic)
 
Dernière édition:
re
oui tout simplement par ce que pour les label, textbox, image et autres leur fenêtres sont clipées
en d'autre therme mergées
ce qui fait que ce n'ai plus accessible via les api window
clipsibbling et clipchildren

d'ailleurs le userform lui même a une fenêtre child qui est aussi de classe F3 server xxxxxx
par contre tout les api connus de la user32 et autre te donneront le handle du userform
 
je te rassure @Dudu2 je veux rien et surtout pas de ton usine a gaz imbuvable ou seul toi t y retrouvera
Je te retourne le compliment.
1 n'est plus tellement fluide
2 il y a même des ratés dans le rythme du scroll( ce que je voulais surtout éviter) pour ne pas dire 2/3 tour de molette pour rien de temps en temps
C'est très surprenant, car comme je l'ai déjà dit, j'ai adopté pour cette version ton propre système de boucle (en mieux codé) avec la différence que la sortie n'est pas conditionnée par le ClassName du Parent (erreur de ton code) mais le Handle qui change.
Donc... difficile de te croire !

A noter que la version précédente utilisant les RECT a été validées par mes "utilisateurs". Elle ne marchait pas chez toi, dommage, mais bon...
 
re
(en mieux codé
va dans ton gestionnaire de tache et affiche les performances en testant ton truc
tu va peut être comprendre ce que veux dire mieux coder et mal coder

ce que l'on cherche a faire ici c'est de faire quelque chose qui fonctionne partout sans avoir à modifier quoi que ce soit
et télécharge toi spy++ au moins
comme ça tu pourra faire certaines analyses toi même
 
Et comme quoi je suis pas sectaire et que je prends ce qu'il y a de bon chez les autres, je t'ai emprunté tes ScrollUp/Down pour les autres Controls (UserForm / Frame / Page). En plus de ton système de boucle. Décidément, avec cette V2, on va m'accuser de plagiat !
1742221589164.gif

Heureusement que c'est codé à 100% différent.

Un bémol... Une TextBox en Frame et en MultiPage scrollés n'est même pas détectée par le MouseMove !
 

Pièces jointes

Dernière édition:
allez v 3.0 pour windowfrompoint avec la suppression definitive de copymemory
donc maintenant c'est a tester sur diverses config

@Dudu2 c'est bien beau de vouloir faire avec des controls non concerné mais tu en perd de la fluidité
en tout cas mis a part le problème de doublage de control le scroll marche mais il beaucoup moins fluide
pour le reste j'ai pas testé vu que c'est moins fluide je ne continue pas

v3.0

je vais maintenant travailler sur la sortie quand on entre dans une autre liste qui n'est pas pris en charge

Re,
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
Animation.gif
 
- 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