Mouse-Scroll als Event abfragen
Hallo,
ich habe eine Datenbank-Form und würde das Mausrad gern dazu nutzen, zwischen den Datensätzen hin und her zu wechseln.
Lässt sich das in der Event-Abfrage mittels MouseWheel() oder ähnlich auch plattformübergreifend für Windows und Linux bewerkstelligen?
Danke für Tipps
Mouse-Scroll als Event abfragen
Re: Mouse-Scroll als Event abfragen
Moin,
also unter windows kann man das so lösen:
Unter Linux muss man da wahrscheinlich was mit GTK oder so machen. (aber da bin ich raus)
BTW: Warum funktionieren hier eigentlich die code-pb und /code-pb Tags nicht? (rethorische Frage, vielleicht könnte das ja eingeschaltet werden)
also unter windows kann man das so lösen:
Code: Alles auswählen
EnableExplicit
#Window_0 = 0
#Text_0 = 0
#Listbox_0 = 1
Procedure.w MouseWheelDelta(wParam) ; returns -1 or 1 (HINT: with .w we got a proper result here)
Protected result.w
result = ((wParam >> 16) & $FFFF) ; hiword
result = -(result / #WHEEL_DELTA) ; - gives a better feeling about the direction
ProcedureReturn result ; msdn: WHEEL_DELTA == 120
EndProcedure
Procedure main()
Protected index, wheel
If OpenWindow(#Window_0, 0, 0, 400, 350, "Mouse Wheel ....", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
TextGadget(#Text_0, 8, 0, 384, 18, "Mouse Wheel: ")
ListViewGadget(#Listbox_0, 8, 32, 360, 240)
For index = 0 To 9
AddGadgetItem(#Listbox_0, -1, "Item #" + index + " of the Listbox")
Next index
; set selection to the first item ....
index = 0
SetGadgetState(#Listbox_0, index)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break ; bye
Case #PB_Event_Gadget
If EventGadget() = #Listbox_0
index = GetGadgetState(#Listbox_0)
EndIf
Case #WM_MOUSEWHEEL
wheel = MouseWheelDelta(EventwParam())
index + wheel ; calc new index :)
If index >= 0 And index < CountGadgetItems(#Listbox_0)
SetGadgetState(#Listbox_0, index)
Else
; simple error correction
If index < 0 : index = 0 : EndIf
If index >= CountGadgetItems(#Listbox_0) : index = CountGadgetItems(#Listbox_0) - 1 : EndIf
EndIf
SetGadgetText(#Text_0, "New Index == " + index + " | wheel (direction) == " + wheel)
EndSelect
ForEver
EndIf
ProcedureReturn 0 ; default value anyway!!!
EndProcedure
End main()
BTW: Warum funktionieren hier eigentlich die code-pb und /code-pb Tags nicht? (rethorische Frage, vielleicht könnte das ja eingeschaltet werden)
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Re: Mouse-Scroll als Event abfragen
Ich habe vor 10 Jahren schon einmal im englischen Forum hier mehrere Multi-Plattform-Beispiele gezeigt, die entweder per Polling (ständige Abfragen) oder per Callback das vertikale Scrolling mit dem Mausrad erkennen und angeben oben das Mausrad nach oben oder unten bewegt wurde.