Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulette)

  • Initiateur de la discussion Compte Supprimé 979
  • Date de début

thomashty

XLDnaute Occasionnel
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Bizarre car cela ne fonctionne pas chez moi...
Avez vous effectué des modifications ?
 

bidochon34800

XLDnaute Junior
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Non je pas fait aucune modification, mais je vous confirme que ça fonctionne parfaitement.
 

saiya

XLDnaute Nouveau
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Non je pas fait aucune modification, mais je vous confirme que ça fonctionne parfaitement.

Et bien dans ce cas tu as un win64 mais un office32 bits...

moi j'ai modifié pour 64 bits le code, mais j'ai un bug, ça ne défile que vers le bas, pas vers le haut (le haut réagis comme si j'allais vers le bas aussi).
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez en déclarant RtlMoveMemory comme ceci :
VB:
Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByRef Destination As Any, ByRef Source As Any, ByVal Length As LongPtr)
Édition: Sachant qu'à l'utilisation si c'est une adresse dont on dispose en guise d'argument il faut préciser ByVal devant.
Ou bien comme cela :
VB:
Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByVal Destination As LongPtr, ByVal Source As LongPtr, ByVal Length As LongPtr)
sachant qu'alors à l'utilisation il faut je suppose préciser ByRef devant un des paramètres si on ne dispose pas de son adresse.

Édition 2: D'une façon générale, pour ne pas avoir d'incompatibilité de type, une expression AddressOf quelquechose ou VarPtr(quelquechose) doit s'affecter à un LongPtr. C'est en quelque sorte un 'méta-type' de donnée automatiquement équivalent à Long en 32 bits et à LongLong en 64 bits.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Merci beaucoup BrunoM45 pour tes fichiers. Je tournais en rond sur Internet avec des trucs complexes et non fonctionnels.

Y a-t-il un moyen de rentrer directement dans la ListBox pour ne pas avoir à sélectionner un Item pour que le Scroll soit opérationnel ?
J'ai essayé un .SetFocus, puis un .ListItem = 0 mais rien à faire. Il faut cliquer dans la ListBox pour déclencher le Scroll souris.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Salut Dudu2

Y a-t-il un moyen de rentrer directement dans la ListBox pour ne pas avoir à sélectionner un Item pour que le Scroll soit opérationnel ?
J'ai essayé un .SetFocus, puis un .ListItem = 0 mais rien à faire. Il faut cliquer dans la ListBox pour déclencher le Scroll souris.
Il ne faut malheureusement surtout pas, car dans mes souvenirs, ça faisait planter Excel :(
 

Dudu2

XLDnaute Barbatruc
Sur ce sujet, JM27 a réussi en entrer directement en ComboBox en cette instruction insérant Me.ComboBox1.DropDown dans cette fonction:
VB:
Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Définir les noms des objet à l'ouverture de l'USF
  ' sont utilisés dans le code du hook
  Set ObjUSF = Me: Set ObjList = Me.ComboBox1
  'Store the first TopIndex Value
  intTopIndex = Me.ComboBox1.TopIndex
  Me.ComboBox1.DropDown
  '
  Hook_Mouse
End Sub

Par contre, il n'y a ps l'équivalent pour le ListBox !
 

Lorenzini

XLDnaute Occasionnel
Bonjour Bruno,

Les fichiers ont l'air super mais je n'arrive pas à les faire fonctionner... j'ai à chaque fois le message "incompatibilité de type"...
Pouvez-vous éclairer mon chemin de débutant sur quoi faire pour solutionner le problème ?
(Utilisant une version 64 bits, j'ai rajouté "PtrSafe" devant Function)
1588030232701.png
 

Pièces jointes

  • MouseWheelHookV2a_64bit (1).xlsm
    30.5 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Bonsoir.
Dans les Declare sur version 64bits les arguments ByVal destinés à recevoir des expressions AddressOf ou VarPtr doivent être déclarés As LongPtr.
Et, à ma connaissance, pour CopyMemory, tous doivent l'être, y compris Length parce qu'on pourrait en théorie lui demander de déplacer une zone de mémoire dont la taille en octets dépasse la capacité d'adressage sur 32bits
Édition: Je m'aperçois que j'en avais d'ailleurs déjà parlé au poste #37.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Bonjour Lorenzini,
Salut Dranreb ;)

J'ai modifié la version 64bits en v2b pour prendre en compte le LongPtr et une ou 2 petites modifs.

La mise à disposition des fichiers date et je n'avais pas de version 64bits à l'époque

@+
 

Statistiques des forums

Discussions
311 711
Messages
2 081 786
Membres
101 817
dernier inscrit
carvajal