Microsoft Small Basic

Program Listing: DST499
' A slider control for smallbasic
' This implementtion produces a vlue of 0-1 which is used to control the size of an ellipse shape by percentage
' It could just as easily produce a value of 1-100 or 1-255

GraphicsWindow.Width = 800
GraphicsWindow.Height = 500
GraphicsWindow.CanResize = "False"
GraphicsWindow.BackgroundColor = "NavajoWhite"
GraphicsWindow.MouseDown = onMouseDown
GraphicsWindow.MouseUp = onMouseUp
GraphicsWindow.MouseMove = onMouseMove

' Variables for slider
sliderTop = 30
sliderBottom = 470
sliderLength = sliderBottom - sliderTop
sliderPos = sliderLength/2 + sliderTop
sliderValue = 0
sliderX = 40
sliderRadius = 10
sliderClicked = "False"

' Draw the slider
GraphicsWindow.DrawLine(sliderX, sliderTop, sliderX, sliderBottom)
GraphicsWindow.BrushColor = "DarkBlue"
slider = Shapes.AddEllipse(sliderRadius * 2, sliderRadius * 2)
updateSlider()

' Circle Shape to visualise the slider control's output
GraphicsWindow.BrushColor = "Aqua"
circle = Shapes.AddEllipse(400, 400)
Shapes.Move(circle, 300, 50)
updateCircle()

' Adjust circle's size based on slider position
Sub updateCircle
zoomFactor = (sliderValue * 0.9) + 0.1
Shapes.Zoom(circle, zoomFactor, zoomFactor)
EndSub

' Move the slider based on the mouse
Sub updateSlider
Shapes.Move(slider, sliderX - sliderRadius, sliderPos - sliderRadius)
sliderValue = 1 - (sliderPos-sliderTop) / sliderLength

' Show the value of the slider in the title
GraphicsWindow.Title = "Slider Value: " + sliderValue
EndSub

Sub onMouseDown
xDist = Math.Abs(sliderX - GraphicsWindow.MouseX)
yDist = Math.Abs(sliderPos - GraphicsWindow.MouseY)
dist = Math.SquareRoot(xDist * xDist + yDist * yDist)

If dist < sliderRadius Then
sliderClicked = "True"
EndIf
EndSub

Sub onMouseUp
sliderClicked = "False"
EndSub


Sub onMouseMove
If sliderClicked Then
sliderPos = GraphicsWindow.MouseY
sliderPos = Math.Min(sliderPos, sliderBottom)
sliderPos = Math.Max(sliderPos, sliderTop)
updateSlider()
updateCircle()
EndIf
EndSub