Microsoft Small Basic

Program Listing: HTV015
GraphicsWindow.Width=400
GraphicsWindow.Height=400

GraphicsWindow.DrawBoundText(10,10,1000,"sleep de wijzers met de muis")

GraphicsWindow.MouseDown=OnMouseDown
GraphicsWindow.MouseMove=OnMouseMove
GraphicsWindow.MouseUp=OnMouseUp

'kies 3x een willekeurige hoek en teken daar een wijzer heen

'wijzer 1
For teller=1 to 3
hoek=math.GetRandomNumber(360)
x1=150+100*math.Sin(Math.GetRadians(hoek))
y1=150+100*math.cos(Math.GetRadians(hoek))
'zet de coordinaten van wijzer 1 in het array
wijzer[teller]["x"]=x1
wijzer[teller]["y"]=y1
endfor

tekenwijzers()

Sub tekenwijzers
GraphicsWindow.Clear()
GraphicsWindow.DrawBoundText(10,10,1000,"sleep de wijzers met de muis")
For teller=1 to 3
If teller=geselecteerdewijzer Then
GraphicsWindow.pencolor="red"
Else
GraphicsWindow.pencolor="black"
endif
GraphicsWindow.DrawLine(150,150,wijzer[teller]["x"],wijzer[teller]["y"])
endfor

'zet nog een cirkeltje rond het draaipunt
GraphicsWindow.DrawEllipse(150-2,150-2,5,5)

endsub

Sub OnMouseUp
down=0
endsub

Sub OnMouseMove
If down=1 then
'bewaar de huidige positie van de muis
x=GraphicsWindow.MouseX
y=GraphicsWindow.MouseY

factor=Math.SquareRoot((x-150)*(x-150)+(y-150)*(y-150))
wijzer[geselecteerdewijzer]["x"]=150+(x-150)*100/factor
wijzer[geselecteerdewijzer]["y"]=150+(y-150)*100/factor
tekenwijzers()
Else
' als de muis knop niet ingedrukt is gebeurt er niets
' je zou hier bij elke beweging een lijtje naar het uiteinde van
' de dichtstbijzijnde wijzer kunnen tekenen
endif
endsub

Sub OnMouseDown
down=1

'dit zijn x en y-coordinaten van de muis
x=GraphicsWindow.MouseX
y=GraphicsWindow.MouseY

'welke uiteinde van een wijzer is het dichtstbij?

geselecteerdewijzer=0
rmin=99999999999999 'heel groot
For teller=1 To 3
dx=x-wijzer[teller]["x"]
dy=y-wijzer[teller]["y"]
r=math.SquareRoot(dx*dx+dy*dy)
If r rmin=r
geselecteerdewijzer=teller
endif
endfor

'de muis staat waarschijnlijk niet op 100 pixels van het draaipunt
' maar ze staat wel in de juiste richting
'we berekenen de x,y van het eindpunt van de wijzer door te schalen

factor=Math.SquareRoot((x-150)*(x-150)+(y-150)*(y-150))
wijzer[geselecteerdewijzer]["x"]=150+(x-150)*100/factor
wijzer[geselecteerdewijzer]["y"]=150+(y-150)*100/factor
tekenwijzers()


endsub