(maxgui) center slider cursor
BlitzMax Forums/BlitzMax Beginners Area/(maxgui) center slider cursor
| ||
Hi ! when slider was created, what's the formulae to center the cursor (knob) ? (using setslidervalue). This is 'maxslidervalue' / 2 but is there a command to access or compute this value ? Thanks ! |
| ||
SetSliderValue(slider:TGadget,value)? |
| ||
i know setslidervalue() function. I'm searching how to determine the value to center the knob. |
| ||
It depends on your slider range. Could you make a plain example of your slider. So we have something to work with. |
| ||
Min+(Max-Min)/2 |
| ||
some code sample to explain more.Strict Local window:TGadget=CreateWindow("My Window",0,0,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) SetSliderRange sh , GadgetWidth(Panel) , GadgetWidth(Canvas) SetSliderRange sv , GadgetHeight(Panel) , GadgetHeight(Canvas) 'SetSliderValue sh, ? ' how to determine value to center the knob 'SetSliderValue sv, ? ' how to determine value to center the knob Local t:TTimer = CreateTimer(60) While WaitEvent() 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 |
| ||
hope someone could help me with this ! i've tested setslider value, sh, (GadgetWidth(Panel)/GadgetWidth(canvas)) * 50, but it's not the answer ! in fact i don't know what'is the value computed by setsliderrange. ratio = 'GetSliderRange' sh , GadgetWidth(Panel) , GadgetWidth(Canvas) setslidervalue sh, ratio * 50 |
| ||
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 WendIt'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). |
| ||
Too slow, but here's my code...Strict Local window:TGadget=CreateWindow("My Window",0,0,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) SetSliderRange sh , GadgetWidth(Panel) , GadgetWidth(Canvas) SetSliderRange sv , GadgetHeight(Panel) , GadgetHeight(Canvas) SetSliderValue sh, (GadgetWidth(Canvas)-GadgetWidth(Panel))/2 SetSliderValue sv, (GadgetHeight(Canvas)-GadgetHeight(Panel))/2 Local t:TTimer = CreateTimer(60) While WaitEvent() 'Print CurrentEvent.ToString() Select EventID() Case EVENT_TIMERTICK Print "SH: "+SliderValue(sh)+" and SV: "+SliderValue(sv) 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 P.S.: To speed this up, store the canvas size and panel size values in different vars. So you don't need to call the functions dozens of times every loop. |
| ||
Many thanks for your code samples ! i've used Grisu code into my program. |