Salve, come posso fare per far fare muovere la scrollbar con la rotellina del mouse in una form ad esempio???Grazie, devo utilizzare le api di Windows???GRAZIE GRAZIE![]()
Salve, come posso fare per far fare muovere la scrollbar con la rotellina del mouse in una form ad esempio???Grazie, devo utilizzare le api di Windows???GRAZIE GRAZIE![]()
è necessario attivare un Hook di sistema... che potrebbe rendere instabile il tuo programma provocando anche dei crash dell'IDE in caso di errore....
oppure utilizzare un mio OCX
si chiama WheelCatcher
una volta registrato nella lista dei componenti di VB lo trovi come Mouse Wheel Catcher
per usarlo lo metti sul form in cui vuoi intercettare il movimento della rotella del mouse.
il componente rilascia un evento, al movimento della rotella:
Rotation assume valore 1 e -1 a seconda che la rotella vada su o giù, segnala quindi il verso di rotazione.codice:Private Sub WheelCatcher1_WheelRotation(Rotation As Long, X As Long, Y As Long, CtrlHwnd As Long) End Sub
X e Y sono le coordinate del mouse in cui la rotella viene mossa.
CtrlHwnd è l'Handle del controllo su cui la rotella viene azionata.
se quindi vuoi muovere la scrollbar del form non devi fare altro che incrementare o decrementare il Value della scrollbarr, a seconda del valore di Rotation, e se l'hWnd rilevato in CtrlHwnd è uguale a TuoForm.hWnd
tutto qui
se dovessi avere problemi, chiedi pure...
Boolean
[OT] @Boolean scusate l'OT... volevo solo fare i complimenti a Boolean per l'OCX. veramente carina e molto utile, avrei sempre voluto fare delle scrollbars con la rotellina, ma ho sempre creduto che fosse troppo complicato, ed invece ho scoperto che con la tua OCX è anche molto facile.[/OT]
Grazie Artemio
in effetti uno degli scopi dell'informatica è sempre stato quello di semplificare la vita...
Boolean
Ciao innanzitutto grazie mille, solo che non ho ben capito l'ultima parte per assegnare la rotation al valore della scrollBar GRAZIE
prova così:
la routine si basa sul valore di SmallChange della ScrollBar, quindi puoi ottenere un incremento più o meno ampio impostando diversamente questo valore.codice:Private Sub WheelCatcher1_WheelRotation(Rotation As Long, X As Long, Y As Long, CtrlHwnd As Long) Dim ActValue As Integer Dim Increm As Integer ActValue = VScroll1.Value Increm = VScroll1.SmallChange * Rotation If CtrlHwnd = Me.hWnd Then If ActValue - Increm < VScroll1.Min Then VScroll1.Value = VScroll1.Min: Exit Sub If ActValue - Increm > VScroll1.Max Then VScroll1.Value = VScroll1.Max: Exit Sub VScroll1.Value = ActValue - Increm End If End Sub
Boolean
Non va come mi hai fatto provare, non succede nulla e la scrollBar con la rotellina non funziona
PERCHE'?
controlla i valori Min e Max della tua ScrollBar, forse li hai ancora impostati di defalut cioè 0 e 32767.
considerato che, come ti dicevo prima, quel codice si basa sulla proprietà SmallChange, che di default è impostata a 1, direi che è piuttosto difficile apprezzare il movimento dello slider, non credi?!
Boolean.
P.S.: il codice, comunque, funziona.
Scusami ma il mio problema non è questo che come ctrlHwnd mi dà sempre lo stesso Hwnd che non coincide con l'Hwnd della form ed è sempre 66454.
allora togli la condizione per il controllo dell'hWnd, così la rotellina sarà attiva per qualsiasi posizione abbia il mouse...
in pratica:
codice:Private Sub WheelCatcher1_WheelRotation(Rotation As Long, X As Long, Y As Long, CtrlHwnd As Long) Dim ActValue As Integer Dim Increm As Integer ActValue = VScroll1.Value Increm = VScroll1.SmallChange * Rotation If ActValue - Increm < VScroll1.Min Then VScroll1.Value = VScroll1.Min: Exit Sub If ActValue - Increm > VScroll1.Max Then VScroll1.Value = VScroll1.Max: Exit Sub VScroll1.Value = ActValue - Increm End SubBoolean