Seite 1 von 1

MouseWheel für PB 5+?

Verfasst: 14.02.2013 13:13
von Lambda
habe folgende MouseWheel Funktion gefunden, welche aber scheinbar nichtmehr geht. Original Code war auch ohne CallBack.

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2289&postdays=0&postorder=asc&start=10
; Author: Danilo (updated for PB4.00 by blbltheworm)
; Date: 14. September 2003
; OS: Windows
; Demo: Yes

#WM_MOUSEWHEEL = $20A 
#zoomspeed = 4 
Wheel = 20 

Procedure.w MouseWheelDelta() 
  x.w = ((EventwParam()>>16)&$FFFF) 
  ProcedureReturn -(x / 120) 
EndProcedure 

Procedure cb(hwnd, msg, wParam.w, lParam.l)
  Result = #PB_ProcessPureBasicEvents
  
  Select msg
    Case #WM_MOUSEWHEEL 
      Wheel + MouseWheelDelta() * #zoomspeed 
      Debug MouseWheelDelta()
      If Wheel < 8:Wheel = 8:EndIf 
      SetGadgetText(0,Str(Wheel)) 
  EndSelect
  
  ProcedureReturn Result
EndProcedure

OpenWindow(0,0,0,400,400,"Mouse Wheel z00m",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
CreateGadgetList(WindowID(0)) 
StringGadget(0,30,0,450,400,"20") 

SetGadgetFont(0,LoadFont(0,"Arial",Wheel)) 

SetWindowCallback(@cb())
Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow: End 
  EndSelect 
ForEver 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -

Re: MouseWheel für PB 5+?

Verfasst: 14.02.2013 13:25
von ts-soft
Der Originalcode aus dem CodeArchiv funktioniert einwandfrei!
Der mit dem Callback, deren Parameter falsch Typen haben (wParam ist kein Word und lParam auch kein Long),
kann nicht funktionieren, ausser unter Win16, aber da läuft PB eher nicht :mrgreen:

Hier der funktionierende Code aus dem Codearchiv:

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2289&postdays=0&postorder=asc&start=10
; Author: Danilo (updated for PB4.00 by blbltheworm)
; Date: 14. September 2003
; OS: Windows
; Demo: Yes

#WM_MOUSEWHEEL = $20A 

Procedure.w MouseWheelDelta() 
  x.w = ((EventwParam()>>16)&$FFFF) 
  ProcedureReturn -(x / 120) 
EndProcedure 

OpenWindow(0,0,0,400,400,"Mouse Wheel z00m",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
 ; CreateGadgetList(WindowID(0)) 
  StringGadget(0,0,0,450,400,"20") 

#zoomspeed = 4 
Wheel = 20 
SetGadgetFont(0,LoadFont(0,"Arial",Wheel)) 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow: End 
    Case #WM_MOUSEWHEEL 
      Wheel + MouseWheelDelta() * #zoomspeed 
      If Wheel < 8:Wheel = 8:EndIf 
      SetGadgetFont(0,LoadFont(0,"Arial",Wheel)) 
      SetGadgetText(0,Str(Wheel)) 
  EndSelect 
ForEver 
Gruß
Thomas

Re: MouseWheel für PB 5+?

Verfasst: 14.02.2013 13:47
von Lambda
Den mit CallBack habe ich im Forum gefunden, aber der originale geht genauso wenig. (Win7 32/64bit)

Re: MouseWheel für PB 5+?

Verfasst: 14.02.2013 14:00
von ts-soft
Bei mir geht er (Win7 x64 SP1), egal ob 32 oder 64 Bit, egal ob PB4.61, PB5.0 oder PB5.10B8.

Re: MouseWheel für PB 5+?

Verfasst: 14.02.2013 14:04
von Lambda
Kann es sein das ein Touchpad damit nicht läuft? Er wandelt den Cursor in das Scroll-Symbol, scrollt aber nicht sondern setzt die 20 immer auf 0.

Edit: #WM_MOUSEWHEEL unter PB5? Dachte PB unterstützt WinAPI Events in der PB-Ereignisschleife nicht mehr.

Re: MouseWheel für PB 5+?

Verfasst: 14.02.2013 14:12
von ts-soft
cOoki3druqs hat geschrieben:Kann es sein das ein Touchpad damit nicht läuft? Er wandelt den Cursor in das Scroll-Symbol, scrollt aber nicht sondern setzt die 20 immer auf 0.
Vielleicht hat das Touchpad eine falsche Auflösung?
cOoki3druqs hat geschrieben: Edit: #WM_MOUSEWHEEL unter PB5? Dachte PB unterstützt WinAPI Events in der PB-Ereignisschleife nicht mehr.
PB hat WinAPI Events noch nie offiziel in der PB-Ereignisschleife unterstützt! Genauso wenig wie EventwParam(), Goto
usw. offiziel schon lange nicht mehr unterstützt werden. Nutzung auf eigene Gefahr, bzw. Probieren über Studieren :wink: