Microsoft Small Basic

Program Listing: QDS710
' TESTING CODE
buttonClicked = "False"
Controls.ButtonClicked = OnButtonClicked
SelectPenColor()
GraphicsWindow.Title = GraphicsWindow.PenColor
Sub OnButtonClicked
buttonClicked = "True"
EndSub
' PLUG-IN
Sub SelectPenColor
' return selectedPenColor - returned if new pen color is selected
' draw dialog
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
dw = 260
dh = 160
pw = GraphicsWindow.PenWidth
bc = GraphicsWindow.BrushColor
fs = GraphicsWindow.FontSize
GraphicsWindow.PenWidth = 0
GraphicsWindow.BrushColor = "Gray"
dialog = Shapes.AddRectangle(dw, dh)
Shapes.SetOpacity(dialog, 50)
dLeft = (gw - dw) / 2
dTop = (gh - dh) / 2
Shapes.Move(dialog, dLeft, dTop)
' draw buttons
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontSize = 12
dOK = Controls.AddButton("OK", dLeft + 10, dTop + dh - 40)
dCancel = Controls.AddButton("Cancel", dLeft + 50, dTop + dh - 40)
' draw current pen color
pcCandidate = GraphicsWindow.PenColor
GraphicsWindow.BrushColor = pcCandidate
penColor = Shapes.AddRectangle(100, 100)
Shapes.Move(penColor, dLeft + 10, dTop + 10)
' draw palette
palette = "0=Black;1=Red;2=Green;4=Blue;"
pIndex = Array.GetAllIndices(palette)
pNum = Array.GetItemCount(palette)
pLeft = dLeft + 120
pTop = dTop + 10
For i = 1 To pNum
GraphicsWindow.BrushColor = palette[pIndex[i]]
pSquare[i] = Controls.AddButton("■", pLeft + (i - 1) * 30, pTop)
EndFor
continue = "True"
While continue
If buttonClicked Then
button = Controls.LastClickedButton
If button = dOK Then
selectedPenColor = pcCandidate
GraphicsWindow.PenColor = selectedPenColor
continue = "False"
ElseIf button = dCancel Then
continue = "False"
Else
For i = 1 To pNum
If button = pSquare[i] Then
pcCandidate = palette[pIndex[i]]
GraphicsWindow.BrushColor = pcCandidate
Shapes.Remove(penColor)
penColor = Shapes.AddRectangle(100, 100)
Shapes.Move(penColor, dLeft + 10, dTop + 10)
EndIf
EndFor
EndIf
buttonClicked = "False"
Else
Program.Delay(200)
EndIf
EndWhile
' remove controls and dialog
Shapes.Remove(penColor)
For i = 1 To pNum
Controls.Remove(pSquare[i])
EndFor
Controls.Remove(dOK)
Controls.Remove(dCancel)
Shapes.Remove(dialog)
' restore properties
GraphicsWindow.FontSize = fs
GraphicsWindow.PenWidth = pw
GraphicsWindow.BrushColor = bc
EndSub