Microsoft Small Basic

Program Listing: HDB364
' Controls
' Copyright © 2017 Nonki Takahashi. The MIT License.
' Last update 2017-10-15
' Challenge 2017-10

GraphicsWindow.Title = "Controls"
Init()
DrawGrid()
GraphicsWindow.BrushColor = "Black"

While "True"
If buttonClicked Then
If Controls.GetButtonCaption(lBtn) = "AddButton" Then
_param = ""
_param["top"] = topBtn
_param["left"] = leftBtn
param = "caption=caption"
GetTextBoxText()
_param["caption"] = txt
param = _param
AddBtn()
topBtn = topBtn + 30
ElseIf Controls.GetButtonCaption(lBtn) = "AddMultiLineTextBox" Then
_param = ""
_param["top"] = topTBox
_param["left"] = leftTBox
param = "caption=caption"
GetTextBoxText()
_param["caption"] = txt
param = _param
AddMBox()
topTBox = topTBox + 90
ElseIf Controls.GetButtonCaption(lBtn) = "AddTextBox" Then
_param = ""
_param["top"] = topTBox
_param["left"] = leftTBox
param = "caption=caption"
GetTextBoxText()
_param["caption"] = txt
param = _param
AddTBox()
topTBox = topTBox + 30
ElseIf Controls.GetButtonCaption(lBtn) = "SetSize" Then
_param = ""
param = "caption=caption"
GetTextBoxText()
_param["caption"] = txt
param = "caption=width"
GetTextBoxText()
_param["width"] = txt
param = "caption=height"
GetTextBoxText()
_param["height"] = txt
param = _param
SetSize()
EndIf
buttonClicked = "False"
EndIf
EndWhile

Sub AddBtn
ctrl = param
ctrl["type"] = "B"
ctrl["ctrl"] = Controls.AddButton(param["caption"], param["left"], param["top"])
ctrls[param["caption"]] = ctrl
EndSub

Sub AddMBox
ctrl = param
ctrl["type"] = "M"
ctrl["ctrl"] = Controls.AddMultiLineTextBox(param["left"], param["top"])
ctrl["shp"] = Shapes.AddText(param["caption"])
Shapes.Move(ctrl["shp"], param["left"] - 90, param["top"] + 3)
If param["text"] <> "" Then
Controls.SetTextBoxText(ctrl["ctrl"], param["text"])
EndIf
ctrls[param["caption"]] = ctrl
EndSub

Sub AddTBox
ctrl = param
ctrl["type"] = "T"
ctrl["ctrl"] = Controls.AddTextBox(param["left"], param["top"])
ctrl["shp"] = Shapes.AddText(param["caption"])
Shapes.Move(ctrl["shp"], param["left"] - 90, param["top"] + 3)
If param["text"] <> "" Then
Controls.SetTextBoxText(ctrl["ctrl"], param["text"])
EndIf
ctrls[param["caption"]] = ctrl
EndSub

Sub GetTextBoxText
ctrl = ctrls[param["caption"]]
txt = Controls.GetTextBoxText(ctrl["ctrl"])
EndSub

Sub SetSize
ctrl = ctrls[param["caption"]]
Controls.SetSize(ctrl["ctrl"], param["width"], param["height"])
ctrl["width"] = param["width"]
ctrl["height"] = param["height"]
ctrls[param["caption"]] = ctrl
EndSub

Sub DrawGrid
GraphicsWindow.PenColor = "#DDDDDD"
For y = 0 To gh Step 10
GraphicsWindow.DrawLine(0, y, gw, y)
EndFor
For x = 0 To gw Step 10
GraphicsWindow.DrawLine(x, 0, x, gh)
EndFor
GraphicsWindow.PenColor = "#CCCCCC"
For y = 0 To gh Step 50
GraphicsWindow.DrawLine(0, y, gw, y)
EndFor
For x = 0 To gw Step 50
GraphicsWindow.DrawLine(x, 0, x, gh)
EndFor
GraphicsWindow.PenColor = "#999999"
GraphicsWindow.BrushColor = "#999999"
For y = 0 To gh Step 100
GraphicsWindow.DrawLine(0, y, gw, y)
GraphicsWindow.DrawText(2, y + 2, y)
EndFor
For x = 0 To gw Step 100
GraphicsWindow.DrawLine(x, 0, x, gh)
GraphicsWindow.DrawText(x + 2, 2, x)
EndFor
EndSub

Sub Init
gw = 598
gh = 428
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.BackgroundColor = "#EEEEEE"
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontName = "Arial"
param = "left=100;top=22;caption=caption;text=AddTextBox;"
AddTBox()
leftTBox = 100
topTBox = 22 + 30
param = "left=310;top=20;caption=AddButton;"
AddBtn()
leftBtn = 310
topBtn = 20 + 30
Controls.ButtonClicked = OnButtonClicked
EndSub

Sub OnButtonClicked
buttonClicked = "True"
lBtn = Controls.LastClickedButton
EndSub