72 lines
4.1 KiB
Text
72 lines
4.1 KiB
Text
'This code will create a GUI Form and Objects and carry out the Roman Numeral convertion as you type
|
|
'The input is case insensitive
|
|
'A basic check for invalid charaters is made
|
|
|
|
hTextBox As TextBox 'To allow the creation of a TextBox
|
|
hValueBox As ValueBox 'To allow the creation of a ValueBox
|
|
|
|
Public Sub Form_Open() 'Form opens..
|
|
|
|
SetUpForm 'Go to the SetUpForm Routine
|
|
hTextBox.text = "MCMXC" 'Put a Roman numeral in the TextBox
|
|
|
|
End
|
|
|
|
Public Sub TextBoxInput_Change() 'Each time the TextBox text changes..
|
|
Dim cRomanN As Collection = ["M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1] 'Collection of nemerals e.g 'M' = 1000
|
|
Dim cMinus As Collection = ["IV": -2, "IX": -2, "XL": -20, "XC": - 20, "CD": -200, "CM": -200] 'Collection of the 'one less than' numbers e.g. 'IV' = 4
|
|
Dim sClean, sTemp As String 'Various string variables
|
|
Dim siCount As Short 'Counter
|
|
Dim iTotal As Integer 'Stores the total of the calculation
|
|
|
|
hTextBox.Text = UCase(hTextBox.Text) 'Make any text in the TextBox upper case
|
|
|
|
For siCount = 1 To Len(hTextBox.Text) 'Loop through each character in the TextBox
|
|
If InStr("MDCLXVI", Mid(hTextBox.Text, siCount, 1)) Then 'If a Roman numeral exists then..
|
|
sClean &= Mid(hTextBox.Text, siCount, 1) 'Put it in 'sClean' (Stops input of non Roman numerals)
|
|
End If
|
|
Next
|
|
|
|
hTextBox.Text = sClean 'Put the now clean text in the TextBox
|
|
|
|
For siCount = 1 To Len(hTextBox.Text) 'Loop through each character in the TextBox
|
|
iTotal += cRomanN[Mid(hTextBox.Text, siCount, 1)] 'Total up all the characters, note 'IX' will = 11 not 9
|
|
Next
|
|
|
|
For Each sTemp In cMinus 'Loop through each item in the cMinus Collection
|
|
If InStr(sClean, cMinus.Key) > 0 Then iTotal += Val(sTemp) 'If a 'Minus' value is in the string e.g. 'IX' which has been calculated at 11 subtract 2 = 9
|
|
Next
|
|
|
|
hValueBox.text = iTotal 'Display the total
|
|
|
|
End
|
|
|
|
Public Sub SetUpForm() 'Create the Objects for the Form
|
|
Dim hLabel1, hLabel2 As Label 'For 2 Labels
|
|
|
|
Me.height = 150 'Form Height
|
|
Me.Width = 300 'Form Width
|
|
Me.Padding = 20 'Form padding (border)
|
|
Me.Text = "Roman Numeral converter" 'Text in Form header
|
|
Me.Arrangement = Arrange.Vertical 'Form arrangement
|
|
|
|
hLabel1 = New Label(Me) 'Create a Label
|
|
hLabel1.Height = 21 'Label Height
|
|
hLabel1.expand = True 'Expand the Label
|
|
hLabel1.Text = "Enter a Roman numeral" 'Put text in the Label
|
|
|
|
hTextBox = New TextBox(Me) As "TextBoxInput" 'Set up a TextBox with an Event Label
|
|
hTextBox.Height = 21 'TextBox height
|
|
hTextBox.expand = True 'Expand the TextBox
|
|
|
|
hLabel2 = New Label(Me) 'Create a Label
|
|
hLabel2.Height = 21 'Label Height
|
|
hLabel2.expand = True 'Expand the Label
|
|
hLabel2.Text = "The decimal equivelent is: -" 'Put text in the Label
|
|
|
|
hValueBox = New ValueBox(Me) 'Create a ValueBox
|
|
hValueBox.Height = 21 'ValuBox Height
|
|
hValueBox.expand = True 'Expand the ValueBox
|
|
hValueBox.ReadOnly = True 'Set ValueBox to Read Only
|
|
|
|
End
|