This seems to work: finding the range, calculating its center, and setting the slider values to half of that. (I think that TomToad was onto it, but I tried it hands-on rather than theoretical <g>.)
Strict
Local window:TGadget=CreateWindow("My Window",300,100,240,280,,WINDOW_TITLEBAR)
Global Panel : TGadget = CreatePanel:TGadget (10,10,200,200,window)
Global Canvas : TGadget = CreateCanvas (0,0,340,240,Panel)
Local sv : Tgadget = CreateSlider(210,10,16,200,window,SLIDER_VERTICAL)
Local sh : Tgadget = CreateSlider(10 , 210 , 200 , 16 , window , SLIDER_HORIZONTAL)
Local h0 = GadgetWidth(Panel)
Local h1 = GadgetWidth(Canvas)
Local v0 = GadgetHeight(Panel)
Local v1 = GadgetHeight(Canvas)
Print "h/v ranges= " + h0 + "," + h1 + " / " + v0 + "," + v1
SetSliderRange sh , h0 , h1
SetSliderRange sv , v0 , v1
' calculate the the max values possible:
Local hmax = h1 - h0
Local vMax = v1 - v0
Print "hmax = " + hmax
Print "vmax = " + vmax
' set to center of range:
SetSliderValue sh, hmax/2
SetSliderValue sv, vmax/2
Local t:TTimer = CreateTimer(60)
Local oldh, oldv ' for printing values
While WaitEvent()
' print current values
If ( oldh <> SliderValue(sh) )
Print "sh = " + SliderValue(sh) + ", " + "range = " + h0 + " to " + h1
oldh = SliderValue(sh)
EndIf
If ( oldv <> SliderValue(sv) )
Print "sv = " + SliderValue(sv) + ", " + "range = " + v0 + " to " + v1
oldv = SliderValue(sv)
EndIf
'Print CurrentEvent.ToString()
Select EventID()
Case EVENT_TIMERTICK
SetGadgetShape (Canvas, -SliderValue (sh), -SliderValue (sv), GadgetWidth(Canvas), GadgetHeight(Canvas))
SetGraphics CanvasGraphics(Canvas)
Cls
DrawLine 0 , 0 , GadgetWidth(canvas) , GadgetHeight(canvas)
DrawLine 0, GadgetHeight(Canvas),GadgetWidth(canvas),0
Flip
Case EVENT_WINDOWCLOSE
End
End Select
Wend
It's the way that sliders calulate position that's a bit tricky. It's how far it is along from min to max,
adjusted to make min into 0 (rather than where far left = min and far right = max).