Mouse-Scroll als Event abfragen

Für allgemeine Fragen zur Programmierung mit PureBasic.
bullit
Beiträge: 4
Registriert: 14.06.2018 20:06

Mouse-Scroll als Event abfragen

Beitrag von bullit »

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
Axolotl
Beiträge: 266
Registriert: 31.12.2008 16:34

Re: Mouse-Scroll als Event abfragen

Beitrag von Axolotl »

Moin,
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() 
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)
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Mouse-Scroll als Event abfragen

Beitrag von Shardik »

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.
Antworten