Kontakt
DSVGO
VB bietet leider keine eingebaute Möglichkeit, das Mausrad ("Mousewheel") zu nutzen. Gerade für das schnelle und komfortable Blättern ("Scrollen") durch größere Datenmengen wäre eine Nutzung das Mausrads auch in VB wünschenswert.
Für die folgende Lösung wird die in "Was ist SubClassing - und wie nutzt man es?" vorgestellte "Komponente" benötigt.
Das vollständige Beispiel ist übrigens in folgendem Zip-Archiv zu finden: mwheel.zip (5 KB).
Bei jedem Dreh am Mausrad wird von Windows (bei korrekt installiertem Maus-Treiber) die WM_MOUSEWHEEL-Nachricht abgeschickt. Dabei wird im höherwertigen Wort von wParam ein Wert für die Drehrichtung mitgeliefert.
Benötigt wird ein VB-Formular (z.B. Name="frmTest") mit einem Label (Name="lblValue", Caption="50", große Schrift) und einem VScrollBar (z.B. Name="VScroll", Min=0, Max=100, Value=50, LargeChange=10) darauf.
Im Deklarationsteil des Formulars muss die SubClassing-Komponente bekanntgemacht werden:
Private WithEvents Msg As MsgHook
In Form_Load wird der SubClassing-Komponente mitgeteilt, auf welche Nachricht sie überhaupt reagieren soll:
Private Sub Form_Load() Set Msg = New MsgHook Msg.Hook Me.hWnd, WM_MOUSEWHEEL End Sub
Die eigentliche Arbeit geschieht im SubClassing-Ereignis Before: Der jeweils ankommende wParam-Wert wird auf seine Dreh-Richtung analysiert und entsprechend die ScrollBar vor oder zurück "gedreht":
Private Sub Msg_Before(uMsg As Long, wParam As Long, lParam As Long, retVal As Long) Dim Delta As Integer Dim Value As Long With VScroll 'Mausrad-Drehung bestimmen: Delta = (wParam And &HFFFF0000) \ &H10000 'Zielwert bestimmen: If Delta < 0 Then 'nach unten: Value = .Value + .LargeChange Else 'nach oben: Value = .Value - .LargeChange End If 'Min/Max beachten: (wg. Überlauf) Select Case Value Case Is < .Min: Value = .Min Case Is > .Max: Value = .Max End Select 'ScrollBar-Anzeige aktualisieren: .Value = Value End With End Sub
Damit das Label auch immer den aktuellen Wert der ScrollBar wiedergibt, sind noch folgende Ereignis-Prozeduren zu füllen:
Private Sub VScroll_Change() VScroll_Scroll End Sub Private Sub VScroll_Scroll() lblValue.Caption = VScroll.Value End Sub
So, das war es auch schon!
Nach dem Speichern kann das Programm getestet werden: Synchron zum Mausrad ändert sich die ScrollBar und damit der angezeigte Wert. Statt einer ScrollBar könnte man analog auch eine TextBox oder ein Grid verwenden...
© Jost Schwider, 27.06.2002-27.06.2002 - http://vb-tec.de/mausrad.htm