Seite 1 von 1

Re: Mausrad unter OS X

Verfasst: 12.05.2011 21:31
von Shardik
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:

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
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!