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
Mouais...
Activesheet.ListBox.Left
1 - Par accLocation: 453
2 - Par Pane.PointsToScreenPixelsX(Activesheet.ListBox.Left): 451
C'est évidement le 2 qui a raison. Donc c'est pas encore ça !

En plus, comme indiqué plus haut, KO pour les ComboBox non DropDown.
Et pour une TextBox, c'est quoi le dernier argument ?
Laisse tomber accLocation, les charges sont trop élevées 😂
 
Dernière édition:
le 2points ou (3.5point ou 4.66 EN PIXEL) chez moi c'est la correction DWM
VB:
Private Sub UserForm_Click()
    Dim acc As IAccessible
    Dim l As Long, t As Long, w As Long, h As Long, h2 As Long
    Set acc = ListBox1
    ppx = 0.75 ' change le ppx ici pour ta méthode
    acc.accLocation l, t, w, h, ListBox1.TopIndex + 1
    ListBox1.Height = 3.5 + (h * ppx) * ListBox1.ListCount

MsgBox "left:" & l & vbCrLf & " top: " & t & vbCrLf & " right :" & w + l & vbCrLf & " bottom : " & 3.5 + t + (h * ListBox1.ListCount)
End Sub
 
En pièce jointe la version de patrick du post #418 mais pour tous les excel .
J'ai supprimé aussi l'utilisation du CopyMemory et il y a un bouton sur la page principale qui permet de rectifier les listbox si elles se présentent mal au premier affichage.
Testé sous excel 2016 32 bits win 11 ech 100% et ech 125 %
excel 2021 64 bits
excel 2007 win 10
excel 2013 win 10
 

Pièces jointes

re
@Dudu2

tu remarquera que quand il y a @Dudu2 et patricktoulon en joute vbaistique ça suit derrière (3k de vues)
en plus à grand coup de renfort de vieux cochon préhistorique
aben là on a eu notre public 🤪
tout ça parce qu'au départ j'ai fait une erreur dans un autre exercice ce qui m'a donné le msg mousewhell dans peekmessage
devant la promesse de ne plus être ennuyé par l'instabilité du hook j'ai pas hésité
et je crois qu'on a trouvé des bonnes choses
on est même allé un peu plus loin avec iaccessible uiautomationclient
ces deux librairie je les avait laisser de coté depuis quelques années l'une instable et l'autre verbeuse à souhait
mai je suis forcé de constater que c'est plus stable pour iaccessible par com ou api même si c'est pas parfait

on a bien travaillé et on a des bons résultats
quand j'y pense avoir le scroll dans nos interface vba aussi facilement et que je regarde le chemin parcouru y compris avec le hooking ça en est presque rigolo
 
Dernière édition:
En pièce jointe la version de patrick du post #418 mais pour tous les excel .
J'ai supprimé aussi l'utilisation du CopyMemory et il y a un bouton sur la page principale qui permet de rectifier les listbox si elles se présentent mal au premier affichage.
Testé sous excel 2016 32 bits win 11 ech 100% et ech 125 %
excel 2021 64 bits
excel 2007 win 10
excel 2013 win 10
Bonjour à tous,

Animation.gif


Nathe
 
- 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
799
P
Retour