Hier ist das versprochene Multiplattform-Beispiel. Ich habe es mit PB 5.46 im ASCII- und Unicode-Modus auf folgenden Betriebsystemen erfolgreich getestet:
Code: Alles auswählen
EnableExplicit
#Event_ResizeText = #PB_Event_FirstCustomValue
#MaxFontID = 3
#Text = 0
#Window = 0
Enumeration
#EventType_MouseWheel_Down = #PB_EventType_FirstCustomValue
#EventType_MouseWheel_Up
EndEnumeration
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux ; --------------------------------------------------
; ----- Definiert in gdkkeysyms.h
#GDK_KEY_Control_L = $FFE3
#GDK_KEY_Control_R = $FFE4
ProcedureC WindowCallback(*Event.GdkEventAny, *UserData)
Static ControlKeyDown.I
Protected Key.I
Protected *KeyEvent.GdkEventKey
Protected *ScrollEvent.GdkEventScroll
Select *Event\type
Case #GDK_KEY_PRESS, #GDK_KEY_RELEASE
*KeyEvent = *Event
Key = *KeyEvent\keyval & $FFFF
If Key = #GDK_KEY_Control_L Or Key = #GDK_KEY_Control_R
If *Event\type = #GDK_KEY_PRESS
ControlKeyDown = #True
Else
ControlKeyDown = #False
EndIf
Case #GDK_SCROLL
If ControlKeyDown
*ScrollEvent = *Event
Select *ScrollEvent\direction
Case #GDK_SCROLL_UP
PostEvent(#Event_ResizeText, #Window, #Text,
#EventType_MouseWheel_Up)
Case #GDK_SCROLL_DOWN
PostEvent(#Event_ResizeText, #Window, #Text,
#EventType_MouseWheel_Down)
EndSelect
EndIf
EndSelect
gtk_main_do_event_(*Event)
EndProcedure
CompilerCase #PB_OS_MacOS ; --------------------------------------------------
#kCGEventTapOptionListenOnly = 1
#kCGHeadInsertEventTap = 0
#NSControlKeyMask = 1 << 18
#NX_SCROLLWHEELMOVED = 22
#NX_SCROLLWHEELMOVEDMASK = 1 << #NX_SCROLLWHEELMOVED
ImportC ""
CGEventTapCreateForPSN(*ProcessSerialNumber, CGEventTapPlacement.I,
CGEventTapOptions.I, CGEventMask.Q, CGEventTapCallback.I, *UserData)
GetCurrentProcess(*ProcessSerialNumber)
EndImport
ProcedureC MouseWheelCallback(CGEventTapProxy.I, CGEventType.I, CGEvent.I,
*UserData)
Protected DeltaY.CGFloat
Protected NSEvent.I
Protected Point.NSPoint
NSEvent = CocoaMessage(0, 0, "NSEvent eventWithCGEvent:", CGEvent)
CocoaMessage(@DeltaY, NSEvent, "deltaY")
If CocoaMessage(0, NSEvent, "modifierFlags") & #NSControlKeyMask
If DeltaY < 0.0
PostEvent(#Event_ResizeText, #Window, #Text,
#EventType_MouseWheel_Down)
Else
PostEvent(#Event_ResizeText, #Window, #Text,
#EventType_MouseWheel_Up)
EndIf
EndIf
EndProcedure
CompilerCase #PB_OS_Windows ; ------------------------------------------------
Procedure WindowCallback(WindowHandle.I, Msg.I, WParam.I, LParam.I)
If GetAsyncKeyState_(#VK_LCONTROL) & $8000 Or
GetAsyncKeyState_(#VK_RCONTROL) & $8000
If Msg = #WM_MOUSEWHEEL
If (WParam >> 16) & $8000
PostEvent(#Event_ResizeText, #Window, #Text,
#EventType_MouseWheel_Down)
Else
PostEvent(#Event_ResizeText, #Window, #Text,
#EventType_MouseWheel_Up)
EndIf
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
CompilerEndSelect
Define CurrentFont.I = 1
LoadFont(0, "Arial", 10)
LoadFont(1, "Arial", 12)
LoadFont(2, "Arial", 14)
LoadFont(3, "Arial", 18)
OpenWindow(0, 200, 100, 600, 140, "Mausrad-Erkennung")
TextGadget(#Text, 10, 60, WindowWidth(0) - 20, 30,
"Vergrößern/verkleinern mit <Strg> + Mausrad", #PB_Text_Center)
SetGadgetFont(0, FontID(CurrentFont))
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
gdk_event_handler_set_(@WindowCallback(), 0, 0)
CompilerCase #PB_OS_MacOS
Define MachPort.I
Define ProcessSerialNumber.Q
GetCurrentProcess(@ProcessSerialNumber)
MachPort = CGEventTapCreateForPSN(@ProcessSerialNumber,
#kCGHeadInsertEventTap, #kCGEventTapOptionListenOnly,
#NX_SCROLLWHEELMOVEDMASK, @MouseWheelCallback(), 0)
If MachPort
CocoaMessage(0, CocoaMessage(0, 0, "NSRunLoop currentRunLoop"),
"addPort:", MachPort,
"forMode:$", @"kCFRunLoopCommonModes")
EndIf
CompilerCase #PB_OS_Windows
SetWindowCallback(@WindowCallback(), 0)
CompilerEndSelect
SetActiveGadget(#Text)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
gdk_event_handler_set_(0, 0, 0)
CompilerCase #PB_OS_MacOS
CFRelease_(MachPort)
CompilerEndSelect
Break
Case #Event_ResizeText
Select EventType()
Case #EventType_MouseWheel_Down
If CurrentFont > 0
CurrentFont - 1
SetGadgetFont(0, FontID(CurrentFont))
EndIf
Case #EventType_MouseWheel_Up
If CurrentFont < #MaxFontID
CurrentFont + 1
SetGadgetFont(0, FontID(CurrentFont))
EndIf
EndSelect
EndSelect
ForEver