Code archives/User Input/Input in Graphics Mode
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Here is two handy input functions. Works as input from Blitz3D but it does NOT stop the program. Displays the text you write. Second input works just as the "old" input, waits for you to write a text (and display that text), continues when you press enter. Both require graphics mode before they can be used. NOTE: Before you use them or makemods change the names of the functions to suit your style. 'MAKE MODULE If you want to use them as normal commands then you have to make a module out of this file. Simple uncomment the four lines at top (see below) and UNcomment the demonstration. Then create a folder like this -> BlitzMax\mod\pub.mod\input.mod\ in this directory put the code below, name it input.bmx. Now go into BlitzMax\Bin\ in the cmd prompt Write: bmk makemods pub.input | |||||
'Strict
Rem
bbdoc: Input in GraphicsMode
End Rem
' Uncomment the four lines below to use this as a module (you have to build it then)
'Module Pub.input
'ModuleInfo "Version: 1"
'ModuleInfo "Author: Wave~"
'ModuleInfo "License: Blitz Shared Source Code and Public Domain"
Import BRL.Max2D
Import BRL.Retro
Rem
bbdoc: InputText works just as a normal input but in graphicsmode. It waits for you to press enter then returns a string.
endrem
Function InputText$(Text$,X,Y)
Local Inp$
Repeat
Inp = TInput.Text(Text$,X,Y)
Flip;Cls
Until Inp <> ""
Return Inp
EndFunction
Rem
bbdoc: InputText works just as a normal Textinput but it does NOT stop the program! Returns "" until ENTER is pressed then the message you have written is returned as a string.
endrem
Function DynamicInput$(Text$,X,Y)
Return TInput.Text(Text$,X,Y)
EndFunction
Private
Type TInput
Global tempText$
Function Text$(Text$,X,Y)
Local aKeytoGet = GetChar()
If aKeytoGet'Anykey was pressed
If aKeytoGet = 13 'ENTER
Text$ = tempText$
If Text$ = "" Then Text = " "
tempText$ = ""
FlushKeys
Return Text$
Else If aKeytoGet = 8 Or aKeytoGet = 4 'AscII For Backspace And Delete
If Len( tempText$ ) > 0 Then tempText$ = Left$( tempText$, Len(tempText$) -1 )
Else' If aKeytoGet>=32 And aKeytoGet<=122 And Len(Message)<52
tempText$:+ Chr$(aKeytoGet)
EndIf
EndIf
DrawText Text$ + tempText,X,Y
Return ""
EndFunction
EndType
'Rem
'Shows the use of Both input methods!
'--------------------------------------------------------
Graphics 300,70,0 'Graphicsmode is a MUST
Local Name$ = InputText("Enter Your Name: ",10,10)
DrawText "Your Name was: "+Name$,30,30 ;Flip
WaitKey()
Local X, Code$
While Not KeyDown(Key_Escape)
Code = DynamicInput$( Name+" enter code : ",10,10)
If Upper(Code) = Upper("code") Then DrawText "-- Correct Code! --",10,30;Flip;WaitKey() Else DrawText "Enter ~qCode~q ok?",10,30
DrawRect X,50,40,5 ; X:+1 ; If X > GraphicsWidth() X = 0
Flip;Cls
Wend
'--------------------------------------------------------
'Good to have function
'EndRem |
Comments
| ||
try thisGraphics 640,480,0 foo$ = gl_input$(10,10,"what is your name? ") SetColor 255,255,0 ; SetScale(2,2) DrawText "hello "+foo$+", how are you?",100,100 Flip WaitMouse End '------------------------------------- Function gl_input$(x,y,prompt$ = "?") Repeat Cls DrawText prompt$+m$,10,10 DrawText key,10,50 hit_key = 0 For key = 1 To 226 hit_key = KeyHit(key) If hit_key m$ = m$ + Chr(key) If key = KEY_ENTER Return m$ EndIf If key = KEY_BACKSPACE l = Len(m$) m = m[..l-2] EndIf EndIf Next Flip Until KeyHit(KEY_ESCAPE) End Function |
| ||
I added a little modification so that it has a cursor.Strict
Rem
bbdoc: Input in GraphicsMode
End Rem
' Uncomment the four lines below to use this as a module (you have to build it then)
'Module Pub.input
'ModuleInfo "Version: 1"
'ModuleInfo "Author: Wave~"
'ModuleInfo "License: Blitz Shared Source Code and Public Domain"
Import BRL.Max2D
Import BRL.Retro
Rem
bbdoc: InputText works just as a normal input but in graphicsmode. It waits for you to press enter then returns a string.
endrem
Function InputText$(Text$,X,Y)
Local Inp$
Repeat
Cls
Inp = TInput.Text(Text$,X,Y)
Flip
If KeyDown(KEY_ESCAPE)
Exit
EndIf
Until Inp <> ""
Return Inp
EndFunction
Rem
bbdoc: InputText works just as a normal Textinput but it does NOT stop the program! Returns "" until ENTER is pressed then the message you have written is returned as a string.
endrem
Function DynamicInput$(Text$,X,Y)
Return TInput.Text(Text$,X,Y)
EndFunction
Private
Type TInput
Global tempText$
Global blinktimer:Int = Null
Global show:Int = True
Function Text$(Text$, X, Y)
If blinktimer = Null
blinktimer = MilliSecs()
EndIf
Local aKeytoGet = GetChar()
If aKeytoGet'Anykey was pressed
blinktimer = Null
show = False
If aKeytoGet = 13 'ENTER
Text$ = tempText$
If Text$ = "" Then Text = " "
tempText$ = ""
blinktimer = Null
show = True
FlushKeys()
Return Text$
ElseIf aKeytoGet = 8 Or aKeytoGet = 4 'AscII For Backspace And Delete
If Len( tempText$ ) > 0 Then tempText$ = Left$( tempText$, Len(tempText$) -1 )
Else' If aKeytoGet>=32 And aKeytoGet<=122 And Len(Message)<52
tempText$:+ Chr$(aKeytoGet)
EndIf
EndIf
If MilliSecs() > blinktimer + 500
If show = True
show = False
blinktimer = MilliSecs()
Else
show = True
blinktimer = MilliSecs()
EndIf
EndIf
If show = True
DrawText Text$ + tempText + "|", X, Y
Else
DrawText Text$ + tempText, X, Y
EndIf
Return ""
EndFunction
EndType
'Rem
'Shows the use of Both input methods!
'--------------------------------------------------------
Graphics 640,480,0 'Graphicsmode is a MUST
Local Name$ = InputText("Enter Your Name: ",10,10)
DrawText "Your Name was: "+Name$,30,30 ;Flip
WaitKey()
Local X, Code$
While Not KeyDown(Key_Escape)
Cls
Code = DynamicInput$( Name+" enter code : ",10,10)
If Upper(Code) = Upper("code") Then DrawText "-- Correct Code! --",10,30;Flip;WaitKey() Else DrawText "Enter ~qCode~q ok?",10,30
DrawRect X,50,40,5 ; X:+1 ; If X > GraphicsWidth() X = 0
Flip
Wend
'--------------------------------------------------------
'Good to have function
'EndRemEDIT: Now that I look this over, it might not work. :) |
| ||
| Added ability to change Blink rate of cursor ( <0 = no cursor) I noticed a problem of the cursor being Blinked on for longer than its blinked off .. I thought it would blink off for the same length of time that its blinked on. Can someone please tell me how to fix this
Strict
Rem
bbdoc: Input in GraphicsMode
End Rem
' Uncomment the four lines below to use this as a module (you have to build it then)
'Module Pub.input
'ModuleInfo "Version: 1"
'ModuleInfo "Author: Wave~ Modified by Ked and then by Blue Steel"
'ModuleInfo "License: Blitz Shared Source Code and Public Domain"
Import BRL.Max2D
Import BRL.Retro
Rem
bbdoc: InputText works just as a normal input but in graphicsmode. It waits for you to press enter then returns a string.
endrem
Function InputText$(Text$,X,Y,BlinkRate)
Local Inp$
Repeat
Cls
Inp = TInput.Text(Text$,X,Y,BlinkRate)
Flip
If KeyDown(KEY_ESCAPE)
Exit
EndIf
Until Inp <> ""
Return Inp
EndFunction
Rem
bbdoc: InputText works just as a normal Textinput but it does NOT stop the program! Returns "" until ENTER is pressed then the message you have written is returned as a string.
endrem
Function DynamicInput$(Text$,X,Y,BlinkRate)
Return TInput.Text(Text$,X,Y,BlinkRate)
EndFunction
Private
Type TInput
Global tempText$
Global blinktimer:Int = Null
Global show:Int
Global BlinkRate:Int
Function Text$(Text$, X, Y, BlinkRate)
If BlinkRate >0
show = True
Else
show = False
EndIf
If blinktimer = Null
blinktimer = MilliSecs()
EndIf
Local aKeytoGet = GetChar()
If aKeytoGet'Anykey was pressed
blinktimer = Null
show = False
If aKeytoGet = 13 'ENTER
Text$ = tempText$
If Text$ = "" Then Text = " "
tempText$ = ""
blinktimer = Null
show = BlinkRate
FlushKeys()
Return Text$
ElseIf aKeytoGet = 8 Or aKeytoGet = 4 'AscII For Backspace And Delete
If Len( tempText$ ) > 0 Then tempText$ = Left$( tempText$, Len(tempText$) -1 )
Else ' If aKeytoGet>=32 And aKeytoGet<=122 And Len(Message)<52
tempText$:+ Chr$(aKeytoGet)
EndIf
EndIf
If BlinkRate >0
If MilliSecs() > blinktimer + BlinkRate
If show = True
show = False
blinktimer = MilliSecs()
Else
show = True
blinktimer = MilliSecs()
EndIf
EndIf
EndIf
If show = True
DrawText Text$ + tempText + "|", X, Y
Else
DrawText Text$ + tempText, X, Y
EndIf
Return ""
EndFunction
EndType
'Rem
'Shows the use of Both input methods!
'--------------------------------------------------------
Graphics 640,480,0 'Graphicsmode is a MUST
Local Name$ = InputText("Enter Your Name: ",10,10,1000)
DrawText "Hello "+Name$+". Please Press a key to continue",30,30 ;Flip
WaitKey()
Local X, Code$
While Not KeyDown(Key_Escape)
Cls
Code = DynamicInput$( Name+" enter code : ",10,10,1000)
If Upper(Code) = Upper("code") Then DrawText "-- Correct Code! --",10,30;Flip;WaitKey() Else DrawText "Enter ~qCode~q ok?",10,30
DrawRect X,50,40,5 ; X:+1 ; If X > GraphicsWidth() X = 0
Flip
Wend
'--------------------------------------------------------
'Good to have function
'EndRem
|
Code Archives Forum