Weiß jemand wie ich an Mausrad events, status oder statusänderung komme?
Wohl gemerkt ohne Screen/WindowedScreen.
Das event das kommt ist immer -1, welches ja nur heißt das es Mac spezifisch ist.
Mausrad unter OS X
Re: Mausrad unter OS X
Das folgende Beispiel funktioniert nicht nur bei Mäusen mit "echten"
horizontalen oder vertikalen Scroll-Rädern, sondern auch mit den
Wisch-Bewegungen der Mighty-Maus:
Update: Ich habe Procedure in ProcedureC abgeändert, damit dieses Beispiel ohne Änderung in Snow Leopard, Lion und Mountain Lion funktioniert. Damit dieses Beispiel ab PB 5.00 funktioniert, muß unter "Compiler/Compiler Optionen..." hinter "Library Subsystem:" das Subsystem "Carbon" eingetragen werden!
horizontalen oder vertikalen Scroll-Rädern, sondern auch mit den
Wisch-Bewegungen der Mighty-Maus:
Code: Alles auswählen
ImportC ""
GetEventClass(EventRef)
EndImport
#kEventClassMouse = 'mous'
#kEventParamMouseWheelAxis = 'mwax'
#kEventParamMouseWheelDelta = 'mwdl'
#kEventMouseWheelAxisX = 0
#kEventMouseWheelAxisY = 1
#kEventMouseWheelMoved = 10
#typeMouseWheelAxis = 'mwax'
#typeSInt32 = 'long'
Structure EventTypeSpec
EventClass.L
EventKind.L
EndStructure
ProcedureC EventHandler(*NextEventHandler, EventRef.L, *UserData)
Protected Info.S
Select GetEventClass(EventRef)
Case #kEventClassMouse
Select GetEventKind_(EventRef)
Case #kEventMouseWheelMoved
If GetEventParameter_(EventRef, #kEventParamMouseWheelAxis, #typeMouseWheelAxis, 0, 4, 0, @MouseWheelAxis) = 0
Select MouseWheelAxis
Case #kEventMouseWheelAxisX
Info = "Wheel moved horizontally"
Case #kEventMouseWheelAxisY
Info = "Wheel moved vertically"
EndSelect
EndIf
If GetEventParameter_(EventRef, #kEventParamMouseWheelDelta, #typeSInt32, 0, 4, 0, @MouseWheelDelta) = 0
Info + ", Delta = " + Str(MouseWheelDelta)
Debug Info
EndIf
EndSelect
EndSelect
If *NextEventHandler
CallNextEventHandler_(*NextEventHandler, EventRef)
EndIf
EndProcedure
Dim EventTypes.EventTypeSpec(0)
OpenWindow(0, 100, 100, 400, 200, "Detect mouse wheel movement")
EventHandlerUPP = NewEventHandlerUPP_(@EventHandler())
EventTypes(0)\EventClass = #kEventClassMouse
EventTypes(0)\EventKind = #kEventMouseWheelMoved
InstallEventHandler_(GetWindowEventTarget_(WindowID(0)), EventHandlerUPP, 1, @EventTypes(), 0, 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow