Du hast den Lösungsweg ja schon (theoretisch) beschrieben....
Warum nicht selbst probieren?
Egal, hier mal mein Quick&Dirty Hack für die verticalen Mausrad bewegungen. Abgeleitet vom ScrollAreaGadget Beispiel der Hilfe.
Viel Spaß damit.
Code: Alles auswählen
; written by Axolotl
EnableExplicit
Global PrevEditorGadgetSubclassProc
Global ScrollStep = 30
Global ii
Procedure EditorGadgetSubClassProc(hWnd, uMsg, WParam, LParam)
Select uMsg
Case #WM_MOUSEWHEEL
WParam = (WParam >> 16) / #WHEEL_DELTA
If WParam = 545 : WParam = ScrollStep : Else : WParam = -ScrollStep : EndIf
SetGadgetAttribute(0, #PB_ScrollArea_Y, WParam + GetGadgetAttribute(0, #PB_ScrollArea_Y))
ProcedureReturn 0 ; we are done.
EndSelect
ProcedureReturn CallWindowProc_(PrevEditorGadgetSubclassProc, hWnd, uMsg, WParam, LParam) ; default
EndProcedure
If OpenWindow(0, 0, 0, 405, 440, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 10, 10, 390,420, 575, 1555, ScrollStep)
ButtonGadget (1, 10, 10, 230, 30,"Button 1")
ButtonGadget (2, 50, 50, 230, 30,"Button 2")
ButtonGadget (3, 90, 90, 230, 30,"Button 3")
TextGadget (4,130,130, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
EditorGadget(10, 8, 168, 360, 140)
For ii = 0 To 15
AddGadgetItem(10, ii, "Line "+Str(ii))
Next
CloseGadgetList()
PrevEditorGadgetSubclassProc = SetWindowLong_(GadgetID(10), #GWL_WNDPROC, @EditorGadgetSubClassProc())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf