No, I mean the arrows on the scrollbar.
Ah, ok. Those arrows don't produce an own event, so you can't act directly on it. But you can check the slider value and set it to whatever you like when you recognize a 1 pixel shift...
Your code also doesn't stop scrolling, so you can scroll as far as you want.
That's right. It just shows an idea how you could catch some events and move the panel as you had problems setting the range of the scrollbar. I leave it up to you to create a working type :)
SuperStrict
Import MaxGui.Drivers
Global PanelAsWindow:TGadget
Global PanelToScroll:TGadget
Global SB1:TGadget
Global Offset:Int
Local Window1:TGadget = CreateWindow:TGadget("Window1",87,108,335,262,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS )
' a panel used as window we look through to to see a part of the bigger scroll-area
PanelAsWindow:TGadget = CreatePanel:TGadget(0,0,299,167,Window1:TGadget,Null,"Panel1")
SetGadgetLayout( PanelAsWindow:TGadget,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
'the panel we want to scroll
PanelToScroll:TGadget = CreatePanel:TGadget(0,0,299,278,PanelAsWindow:TGadget,PANEL_ACTIVE,"Panel2")
SetGadgetLayout( PanelToScroll:TGadget,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
ActivateGadget(PanelToScroll)
'some gagdets on top to scroll, not important
Local TextField1:TGadget = CreateTextField:TGadget(93,36,80,18,PanelToScroll:TGadget,Null)
SetGadgetText( TextField1:TGadget,"TextField1")
Local TextArea1:TGadget = CreateTextArea:TGadget(12,173,275,95,PanelToScroll:TGadget,Null)
SetTextAreaText( TextArea1:TGadget , "TextArea1" )
Local Label1:TGadget = CreateLabel:TGadget("Label1",12,95,80,16,PanelToScroll:TGadget,LABEL_SUNKENFRAME)
Local ProgBar1:TGadget = CreateProgBar:TGadget(207,88,80,23,PanelToScroll:TGadget,Null)
UpdateProgBar( ProgBar1:TGadget,0.200000003 )
'a button outside the scrollarea
Local Ok1:TGadget = CreateButton:TGadget("Ok1",224,178,75,23,Window1:TGadget,BUTTON_OK)
'set the scrollbar
SB1:TGadget = CreateSlider:TGadget(303,0,23,167,Window1:TGadget,SLIDER_VERTICAL | SLIDER_SCROLLBAR )
SetSliderRange( SB1:TGadget,1 ,100 )
SetSliderRange( SB1:TGadget,GadgetHeight(PanelAsWindow),GadgetHeight(PanelToScroll))
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
Select EventSource()
Case Window1 Window1_WC( Window1:TGadget )
End Select
Case EVENT_GADGETACTION
Select EventSource()
Case SB1 SB1_GA( SB1:TGadget , EventData() )
Case Ok1 Ok1_GA( Ok1:TGadget )
End Select
Case EVENT_MOUSEWHEEL
Select EventSource()
Case PanelToScroll PanelToScroll_MW( PanelToScroll:TGadget , EventData() )
End Select
Case EVENT_KEYDOWN
Select EventSource()
Case PanelToScroll PanelToScroll_KD( PanelToScroll:TGadget , EventData() )
End Select
End Select
Forever
Function Window1_WC( Window:TGadget )
DebugLog "Window Window1 wants to be closed"
' HideGadget( Window:TGadget )
End
End Function
Function SB1_GA( Slider:TGadget , Number:Int )
DebugLog "Slider SB1 changed to " + Number
Global LastNumber:Int
Local Offset:Int
If Abs(LastNumber-Number)=1 Then
Offset=Number-(Sgn(LastNumber-Number)*20 )
SetSliderValue(Slider,Offset)
Number = Offset
EndIf
SetGadgetShape( PanelToScroll:TGadget,GadgetX(PanelToScroll),GadgetY(PanelAsWindow)-Number,GadgetWidth(PanelToScroll),GadgetHeight(PanelToScroll) )
LastNumber=Number
End Function
Function Ok1_GA( Button:TGadget )
DebugLog "Button Ok1 was pressed"
End Function
Function PanelToScroll_MW( Panel:TGadget , MouseWheel:Int )
DebugLog "Panel PanelToScroll detected "+ MouseWheel +" Mouse Wheel clicks"
Offset:+Mousewheel*10
SetGadgetShape( PanelToScroll:TGadget,GadgetX(PanelToScroll),GadgetY(PanelAsWindow)+Offset,GadgetWidth(PanelToScroll),GadgetHeight(PanelToScroll) )
End Function
Function PanelToScroll_KD( Panel:TGadget , Key:Int )
DebugLog "Panel PanelToScroll detected Key "+ Key +" pressed"
Select Key
Case KEY_DOWN Offset:+10
Case KEY_UP Offset:-10
End Select
SetGadgetShape( PanelToScroll:TGadget,GadgetX(PanelToScroll),GadgetY(PanelAsWindow)+Offset,GadgetWidth(PanelToScroll),GadgetHeight(PanelToScroll) )
End Function