Newsgroup: it.comp.lang.visual-basic
Titolo: MotoTopo

Mi è stato chiesto di far agire la rotella centrale del mouse sulle barre di
scorrimento di una normale ListView. Mi dicono che su alcune scrollbar
funziona (quelle di sistema) ma non va sulle ListView. Io non ho questo tipo
di mouse per fare le prove. Qualcuno sa se il software del mouse è
programmabile perché agisca sui controlli di VB?, o c'è qualche API o
qualcosa per dire a ListView che deve ricevere l'input dalla rotellina?
Fabio Guerrazzi

E' colpa della ListView.
Tu usi VB6?
Se usi una versione precedente, devi passare a VB6, anche se non ti
garantisco che funzioni.
Altrimenti cerca su internet una ListView fatta per l'intellimouse.
Io l'avevo fatto a suo tempo per Delphi3 e avevo trovato l'oggetto che mi
serviva, dovrebbe esserci anche per VB.
Ciao


Da me funziona benissimo a patto pero' di installare il software di gestione
dell'Intellimouse.
M. Scordamaglia

Questo era la risposta data da un certo Cubiq ad un'analoga domanda
-------------------------------------------
In un modulo:
-------------------------------------------
Option Explicit
'
#If Win32 Then
Public Type POINTAPI
X As Long
Y As Long
End Type
'
Public Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
'
Public Declare Function CallNextHookEx& Lib "user32" (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Integer, lParam As Any)
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Public Declare Function RegisterWindowMessage& Lib "user32" Alias _
"RegisterWindowMessageA" (ByVal lpString As String)
Public Declare Function SetWindowsHookEx& Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long)
Public Declare Function UnhookWindowsHookEx& Lib "user32" _
(ByVal hHook As Long)
'
#End If 'WIN32 declares and types
'
Public Const WH_GETMESSAGE = 3
Public Const MSH_MOUSEWHEEL = "MSWHEEL_ROLLMSG"
'
Public IMWHEEL_MSG As Long
Public HWND_HOOK As Long
Public Function IMWheel(ByVal nCode As Long, ByVal wParam As Long, _
lParam As MSG) As Long
'
If lParam.message = IMWHEEL_MSG Then
  Form1.WheelMoved lParam.wParam, lParam.pt.X, lParam.pt.Y
End If
IMWheel = CallNextHookEx(HWND_HOOK, nCode, wParam, lParam)
End Function
Public Function IMWheel_Hook() As Long
IMWHEEL_MSG = RegisterWindowMessage(MSH_MOUSEWHEEL)
HWND_HOOK = SetWindowsHookEx(WH_GETMESSAGE, _
  AddressOf IMWheel, 0, GetCurrentThreadId)
End Function
Public Sub IMWheel_Unhook()
UnhookWindowsHookEx HWND_HOOK
End Sub
-------------------------------------------
In un form:
-------------------------------------------
Option Explicit
Private Sub Form_Load()
IMWheel_Hook
End Sub
Public Sub WheelMoved(ByVal delta As Long, _
X As Long, Y As Long)
Debug.Print delta, X, Y
End Sub
Private Sub Form_Unload(Cancel As Integer)
IMWheel_Unhook
End Sub
La procedura si aggancia direttamente al windows messaging system quindi il
debug in VB e' piuttosto difficile. Aggiungi il codice per la rotella solo
quando il tuo progetto e' completato.
-------------------------
Ciao Marco


Strano, pensavo che in VB6 funzionasse con tutte le scrollbars...
Comunque la soluzione e' abbastanza complessa, il solito subclass del
controllo, intercettazione di un messaggio (di cui ora mi sfugge il nome) e
relativa reazione (scrolling della scrollbar).
--
Roal Zanazzi
z...@iol.it

Penso che il problema sia del software del mouse:
L'Intellimouse di M$ funziona bene solo con le applicazioni M$ (toh!),
mentre la rotella centrale del Logitech Wheel Mouse funziona bene
con tutte le applicazioni, anche quelle M$ (ritoh!).
(Si può sempre installare il software Logitech anche agli utenti di
IntelliMouse, anche se non credo che sia legale...)
Saluti, Massimo.