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
l'ultime version qui fonctionne partout
10 pages de discussions
des tests dans tout les sens
pour ma part des 10 aines de tests si c'est pas des centaines

et pas un seul crash ou whiteScreen

vous pouvez dire ce que vous voulez mais vous trouverez ça nul part ailleurs
PAS DE HOOKING!!!!!!
PAS D'USINE A GAZ
aussi fluide que si c’était build
et ça s'appelle @jurassic pork et @patricktoulon
Hello,

je viens de tester et ça plante sur la ligne control.TopIndex = Application.Max(control.TopIndex - 1, 1) de la procédure Private Sub MouseWeel(control As Object, Optional yy As Single = 0)
Je suppose qu'il manque un On Error Resume Next avant et un On Error GoTo 0 comme dans les lignes Else...

Merci pour le partage
 
Re @patricktoulon
  • J'ai ouvert ton classeur.
  • Afficher dans VBE le userform
  • Faire F5 -> le Userform s'affiche
  • Et ensuite rien de spécial. Le scroll de la molette de fait rien...

Je n'ai pas d'erreur mais je dois faire quelque chose de "mal". A quoi doit-on s'attendre ? Que doit-on vérifier ?
 
re
Bonjour à tout les deux
oui avec la combo c'est un soucis du a la sous fenêtre qui se développe
oui il faut une gestion d'erreur
je l'ai laissé pour que vous ayez l'expérience du plantage sans le crash excel qu'il y a normalement dans la version avec hooking
si vous voulez remettez le
VB:
Case "ListBox", "ComboBox"
                    If lDelta > 0& Then
                        tbx = "moins"
                        On Error Resume Next
                        control.TopIndex = Application.Max(control.TopIndex - 1, 1)
                        On Error GoTo 0
                    Else
                        tbx = "plus"
                        On Error Resume Next
                        control.TopIndex = Application.Min(control.TopIndex + 1, control.ListCount - 1)
                        On Error GoTo 0
                    End If
ce qui m'importe c'est pas vraiment de savoir si ça marche
mais si l'erreur peut faire crasher excel avec cette version
merci du retour

ça me parait être une bonne alternative au hooking qui rend instable et cause des crashs excel
dites moi si avec la gestion d'erreur ca tourne ?
merci
 
Re @patricktoulon
  • J'ai ouvert ton classeur.
  • Afficher dans VBE le userform
  • Faire F5 -> le Userform s'affiche
  • Et ensuite rien de spécial. Le scroll de la molette de fait rien...

Je n'ai pas d'erreur mais je dois faire quelque chose de "mal". A quoi doit-on s'attendre ? Que doit-on vérifier ?
@mapomme
je n'ai pas d'idée sur la question
il devrait y avoir une réaction forcement
demo1.gif
 
Re,

Avec la première version du classeur (celui de ton premier message) et sans l'avoir modifié en quoi que ce soit, je n'ai pas de plantage.
C'est bien ou mal ? 🤨
non c'est bien
le plantage est du simplement avec la combo et sa window child
mais si ça plante pas c'est que tu a une mémoire assez rapide en tout cas suffisante pour laisser le copymemory faire son déplacement

ce qui est important surtout c'est si il y a quand même l'erreur wparam 0 le copymemory va générer une erreur et c'est normal
par contre avec un hooking callnexthook on a pas la possibilité de le récupérer même avec des gestions d'erreur tandis que là
c'est un do/loop classique donc plantage classique vba avec le surlignage de l'erreur dans le vbe en débogage

avec les on error resume next et goto 0 on gère l'erreur directement
en gros si le message souris est faux on fait rien
 
Re,

alors ça marche ou pas ?
Je pense que tu t'adresses @Nain porte quoi, non ?

En fait ce que j'aime ici c'est qu'on retombe sur des notions de matériel et des notions de base : comportement et performance de la mémoire.
Comme quoi, avoir un PC trop performant n'est pas forcément toujours un avantage en terme de développement car la machine n'est pas représentative de l'état moyen des performance du parc des utilisateurs. Quand on nous répète que la phase de test est cruciale, c'est pas faux.

nota : la réponse est souvent maintenant : votre bécane est obsolète , changez en !!! Tout le monde s'y retrouve : le développeur, le fabricant de machine, le fabricant de composants, le vendeur d'OS et les chinois 😛. L'utilisateur n'a qu'à sortir ses sous... C'était la minute du consommateur 🤪.
 
Dernière édition:
@mapomme ben ça s'adresse à toi aussi

et oui c'est un peu ça le truc
quand je développe un applicatif je cherche a avoir la max de retours pour faire quelque chose qui fonctionne pour tout le monde
(gros super pc puissant ou pas)
si je me cantonnais a ce qui marche chez moi j'avancerais pas beaucoup ,car chez moi tout marche
mon pc dit toujours oui ce couillon 🤣 🤣 🤣

ces chinois commencent a me bouffer les (N)ouilles 🤣 🤪
 
Bonjour tout le monde,

Sur win7 640bits et Excel 2010 32 bits. Le code ne plante pas.
Je n'ai remarqué, chez moi fonctionne bien.

Bonne fin de journée.

edit:
Suggestion: Pourquoi pas un code générique utilisable pour n'importe quel formulaire du projet.
 
Hello,
ben moi comme mapomme rien ne se passait sous Excel 2021 64 bits Windows 11. Mais vu que tu parlais de rectangle dans ton premier message, je me suis douté d'où cela venait. Sur mon portable je suis en mise à l'échelle à 125 % . En mettant celle-ci à 100 % le scroll fonctionne.
Ami calmant, J.P
 
- 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
794
P
Retour