Code archives/User Input/Custom Input boxes

This code has been declared by its author to be Public Domain code.

Download source code

Custom Input boxes by Eikon2004
Very simple design features a blinking cursor, click detection, and tab support. Arrow key movement inside the boxes would make a good addition.
AppTitle "Rpg Input Example by Eikon"
Graphics 640, 320, 16, 2
SetBuffer BackBuffer()

Font = LoadFont("Lucida Console", 16, 0, 0) ; Inputbox Font
SetFont Font

Local name$, class$, gender$
Global itotal% = 3  ; 3 Inputboxes
Global aInbox% = 0, inTime%, inB% = 0 ; Active Inputbox and blink timer

Dim InputBox$(itotal) ; Strings to hold input

ClsColor 212, 208, 200
While Not KeyDown(1)

DrawInputBoxes 50, 50

Delay 5
Flip: Cls
Wend: End

Function DrawInputBoxes(x, y)
MX = MouseX(): MY = MouseY(): MH = MouseHit(1)
inkey% = GetKey() ; Grab Input

If inkey > 31 And inkey < 128 Then ; Filter out unwanted keys
	; Add input to string
	If Len(InputBox$(aInbox)) < 9 Then InputBox$(aInbox) = InputBox$(aInbox) + Chr$(inkey)
EndIf

If inkey = 8 Or inkey = 4 ; Delete
	If Len(InputBox$(aInbox)) > 0 Then InputBox$(aInbox) = Left$(InputBox$(aInbox), Len(InputBox$(aInbox)) - 1)
EndIf

i = 0
For b = y To y + ((itotal - 1) * 64) Step 64
	Color 128, 128, 128: Rect x, b, 100, 28, 0     ; Draw Inputbox
	Color 64, 64, 64: Rect x + 1, b + 1, 98, 26, 0
	Color 212, 208, 200: Rect x + 1, b + 26, 98, 1: Rect x + 98, b + 1, 1, 26
	Color 255, 255, 255: Rect x, b + 27, 100, 1: Rect x + 99, b, 1, 27: Rect x + 2, b + 2, 96, 24
	If i = 0 Then Color 0, 128, 0 ElseIf i = 1 Then Color 0, 0, 128 Else Color 0, 0, 0
	Text x + 4, b + 8, InputBox$(i)
	
	Color 0, 0, 0: 
	If aInbox% = i ; Draw Cursor in active inbox
		If inB = True Then Color 0, 0, 0: Rect x + 4 + (Len(InputBox$(aInbox)) * 10), b + 4, 2, 20, 1
		If MilliSecs() >= inTime + 500 Then ; Blink
			If inB = 0 Then inB = 1 Else inB = 0
			inTime = MilliSecs()
		EndIf
	EndIf

	; Mouse click Detection to change active inputbox
	If MH = 1 And RectsOverlap(MX, MY, 1, 1, x, b, 100, 28) Then aInbox = i

	Select i ; Draw Captions
		Case 0: Text x, b - 20, "Name:"   ; Name
		Case 1: Text x, b - 20, "Class:"  ; Class
		Case 2: Text x, b - 20, "Gender:" ; Gender

	End Select

	i = i + 1
Next

If KeyHit(15) Then aInbox = aInbox + 1 ; Tab support
If aInbox >= 3 Then aInbox = 0

End Function

Comments

Ked2006
Nicely done.


vivaigiochi2011
change
If inB = True Then Color 0, 0, 0: Rect x + 4 + (Len(InputBox$(aInbox)) * 10), b + 4, 2, 20, 1

with this:
If inB = True Then Color 0, 0, 0: Rect x + 4 + stringwidth(InputBox$(aInbox), b + 4, 2, 20, 1

This make the right position of cursor after input...


Code Archives Forum