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
@jurassic pork
Le double affichage est lié au fait que les listbox et les Textbox ne sont pas déposés directement sur la feuille mais sur une sorte de frame qui devrait être entièrement invisible mais pour une raison ou autre il déborde ou c'est la taille du contrôle qui est réduite donc le frame devient visible et il n'est pas rafraichie automatiquement.. le fait d"activer et désactiver le mode création va récréer un nouveu controle avec les bonnes dimensions
 
@jurassic pork
Le double affichage est lié au fait que les listbox et les Textbox ne sont pas déposés directement sur la feuille mais sur une sorte de frame qui devrait être entièrement invisible mais pour une raison ou autre il déborde ou c'est la taille du contrôle qui est réduite donc le frame devient visible et il n'est pas rafraichie automatiquement.. le fait d"activer et désactiver le mode création va récréer un nouveu controle avec les bonnes dimensions
Hello Rheeem
j'ai déjà repéré ce comportement mais dès qu'on enlève le mode création , le double affichage revient :
dbleAffichage.gif

Pour l'instant le seul moyen simple pour l'enlever. C'est d'ouvrir le fichier , l'enregistrer, le refermer, l'ouvrir à nouveau et là je n'ai plus
de double affichage .
 
@jurassic pork

On peut régler le problème par programation en ajustant le contrôle à son containeur
Code:
Dim R as  RECT
  p = GetParent(hListbox)
  GetWindowRect p, R
  SetWindowPos hListbox, 0, 0, 0, R.Right-R.Left, R.Bottom-R.Top, 2
Le souci c'est que c'est plus complexe que cela car en fait les containers sont des objets images et ne sont pas les parents des listbox.
Voici 1 - une capture de Flauinspect avec la feuille qui contient les listbox en mode Création :
InspectModeCreation.png

Il n'y a pas les listBox et en fait il y a "l'empreinte" des listbox dans des objets images
Voici la même chose mais cette fois-ci en mode Normal :
InspectModeActif.png

Cette fois-ci Il y a bien les Listbox mais les "empreintes" sont à un niveau inférieur , n'ont pas de handle et ne sont pas facilement repérable car
ont le même nom, il n'y a que le boundingrectangle pour les repérer.
J'en déduit qu'il y a un problème d'affichage quand les dimensions des ListBox ne correspondent pas à leurs "empreintes"
 
Dernière édition:
J'ai le même problème que ChTi160 en excel 2016 Win11 1920x1080 mise à l'échelle 100 % et quand je me met en mode création ce qui se passe c'est que la police devient minuscule dans la listBox :
ListBox100.png


Par contre si j'ouvre le classeur avec une mise à l'échelle 125% là c'est bon :
ListBox125.png


on est plus sur un phénomène de double affichage mais comme on peut le constater sur les deux captures c'est la largeur des listbox qui a changé.
 
Ben finalement j'ai trouvé la parade au problème d'affichage des ListBox avec ce code :
VB:
Sub RectificationActiveX()
   Dim oSheet As Worksheet
    Dim oShape As Shape, obj As OLEObject
   
    Set oSheet = ThisWorkbook.Worksheets("Feuil1")
    'On parcourt toutes les formes présentes dans la feuille
    For Each oShape In oSheet.Shapes
        Debug.Print oShape.Name, oShape.Width
        For Each obj In oSheet.OLEObjects
          If obj.Name = oShape.Name Then obj.Width = oShape.Width
        Next
    Next
End Sub
Rectification.gif



On balaie toutes les formes de la feuille, dans ces formes il y a les "empreintes" des ActiveX et normalement les empreintes des ActiveX ont comme nom le nom de l'activeX. On regarde si le nom de la forme est le nom d'un ActiveX et alors on rectifie la largeur de l'ActiveX avec la largeur de son empreinte.
 
Bonjour à tous,
Patrick, j'ai téléchargé ton module dans "Ressources", j'ai mis le module dans l'un de mes fichiers, sur l'une des comboBox. Le scroll fonctionne, mais ne remonte pas jusqu'à la 1ère données.
Bonne journée à tous.
 
- 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