I don't know is it right to do things like following (implementing own base editing functions for every key), but anyway I did it for fun while playing with console a bit ^^
Code: Select all
EnableExplicit
If OpenConsole()
PrintN("Type something and try to delete it using backspace & moving arrow keys")
Define Buffer$, BufferSize, BufferPos
Define VK, Key$
Define Back
Repeat
Key$ = Inkey()
VK = RawKey()
Select VK
Case #VK_RETURN:
; display buffer content (receive collected input with enter)
ConsoleTitle(Buffer$)
; clear current line
Print(Chr(#VK_RETURN))
Print(Space(BufferSize))
Print(Chr(#VK_RETURN))
; or can simply jumt to next line
; PrintN("")
; reset buffer
Buffer$ = ""
BufferSize = 0
BufferPos = 0
Case #VK_BACK:
; display: move by 1 char left and erase it (replace by space)
; Print(Chr(#VK_BACK))
; Print(" " + Chr(#VK_BACK))
; edit buffer
If BufferSize
Print(Chr(#VK_RETURN))
Print(Space(BufferSize))
Print(Chr(#VK_RETURN))
Buffer$ = Left(Buffer$, BufferPos - 1) + Right(Buffer$, BufferSize - BufferPos)
BufferSize - 1
BufferPos - 1
Print(Buffer$)
Back = BufferSize - BufferPos
While Back
Print(Chr(#VK_BACK))
Back - 1
Wend
EndIf
Case #VK_DELETE:
; TODO
Case #VK_LEFT:
; move cursor left
If BufferPos
Print(Chr(#VK_BACK))
BufferPos - 1
EndIf
Case #VK_RIGHT:
; move cursor right
If BufferPos <= BufferSize - 1
BufferPos + 1
Print(Mid(Buffer$, BufferPos, 1))
EndIf
Default:
; add regular key to a buffer
If Key$
If Not BufferSize > 64
Buffer$ = Left(Buffer$, BufferPos) + Key$ + Right(Buffer$, BufferSize - BufferPos)
BufferSize + 1
Print(Right(Buffer$, BufferSize - BufferPos))
BufferPos + 1
Back = BufferSize - BufferPos
While Back
Print(Chr(#VK_BACK))
Back - 1
Wend
EndIf
Else
Delay(32)
EndIf
EndSelect
ForEver
EndIf