mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-30 18:50:15 +00:00
148 lines
9.4 KiB
Text
148 lines
9.4 KiB
Text
|
The '''INKEY$''' Function returns user input as [[ASCII]] [[STRING]] character(s) from the keyboard buffer.
|
|||
|
|
|||
|
|
|||
|
{{PageSyntax}}
|
|||
|
:: keypress$ = '''INKEY$'''
|
|||
|
|
|||
|
|
|||
|
''Usage:''
|
|||
|
* Returns [[ASCII]] character string values in upper or lower cases. See: [[UCASE$]] and [[LCASE$]]
|
|||
|
* Returns "" if no key has been pressed since the last keyboard read.
|
|||
|
* Some control keys cannot be read by INKEY$ or will return 2 byte [[ASCII]] codes.
|
|||
|
* INKEY$ can also clear a [[SLEEP]] keypress or the keyboard buffer in a loop.
|
|||
|
* Assign the INKEY$ return to a string variable to save the key entry.
|
|||
|
* [[LOCATE]] ,,1 displays the INKEY$ cursor. Use LOCATE ,,0 to turn it off.
|
|||
|
* Use [[_DEST]] [[_CONSOLE]] before INKEY$ statements to be used in a [[$CONSOLE|console]] window.
|
|||
|
* Returns can be evaluated as certain [[ASCII]] characters or codes.
|
|||
|
{{WhiteStart}}' '''ASCII Keyboard Codes'''
|
|||
|
'
|
|||
|
'''' Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Sys ScL Pause'''
|
|||
|
' 27 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +133 +134 - - -
|
|||
|
'''' `~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ BkSp Ins Hme PUp NumL / * -'''
|
|||
|
' 126 33 64 35 36 37 94 38 42 40 41 95 43 8 +82 +71 +73 - 47 42 45
|
|||
|
''' 96 49 50 51 52 53 54 55 56 57 48 45 61''
|
|||
|
'''' Tab Q W E R T Y U I O P [{ ]} \| Del End PDn 7Hme 8/▲ 9PU + '''
|
|||
|
' 9 81 87 69 82 84 89 85 73 79 80 123 125 124 +83 +79 +81 +71 +72 +73 43
|
|||
|
''' 113 119 101 114 116 121 117 105 111 112 91 93 92 55 56 57 ''
|
|||
|
'''' CapL A S D F G H J K L ;: '" Enter 4/◄- 5 6/-►
|
|||
|
' - 65 83 68 70 71 72 74 75 76 58 34 13 +75 +76 +77 '''E'''
|
|||
|
''' 97 115 100 102 103 104 106 107 108 59 39 52 53 54 '' '''n'''
|
|||
|
'''' Shift Z X C V B N M ,< .> /? Shift ▲ 1End 2/▼ 3PD t'''
|
|||
|
' * 90 88 67 86 66 78 77 60 62 63 * +72 +79 +80 +81 '''e'''
|
|||
|
''' 122 120 99 118 98 110 109 44 46 47 49 50 51 '' '''r'''
|
|||
|
'''' Ctrl Win Alt Spacebar Alt Win Menu Ctrl ◄- ▼ -► 0Ins .Del '''
|
|||
|
' * - * 32 * - - * +75 +80 +77 +82 +83 13
|
|||
|
' '' 48 46''
|
|||
|
'
|
|||
|
' ''' ''Italics'' = LCase/NumLock On * = 2 byte combo only, + = 2 Byte: CHR$(0) + CHR$(code)'''
|
|||
|
'
|
|||
|
{{WhiteEnd}}
|
|||
|
|
|||
|
==Two Byte Combinations==
|
|||
|
* INKEY$ 2 byte combinations always begin with [[CHR$]](0). [[ASC]] will always read the first byte code as zero.
|
|||
|
* QB64 can read the second byte code using: '''{{text|code2 <nowiki>=</nowiki> ASC(press$, 2)|green}}''' Qbasic can read it using: '''{{text|code2 <nowiki>=</nowiki> ASC(RIGHT$(press$, 1))|green}}'''
|
|||
|
|
|||
|
|
|||
|
<center>'''[[ASCII#Two_Byte_Codes|Two Byte Ctrl, Alt and Shift + Function key combinations]]'''</center>
|
|||
|
|
|||
|
{{WhiteStart}} '''Two Byte Characters Key CHR$(0) + "?" '''
|
|||
|
|
|||
|
CHR$(0) + CHR$(16-50) [Alt] + letter
|
|||
|
CHR$(0) + CHR$(59) [F1] ";"
|
|||
|
CHR$(0) + CHR$(60) [F2] "<"
|
|||
|
CHR$(0) + CHR$(61) [F3] "="
|
|||
|
CHR$(0) + CHR$(62) [F4] ">"
|
|||
|
CHR$(0) + CHR$(63) [F5] "?"
|
|||
|
CHR$(0) + CHR$(64) [F6] "@"
|
|||
|
CHR$(0) + CHR$(65) [F7] "A"
|
|||
|
CHR$(0) + CHR$(66) [F8] "B"
|
|||
|
CHR$(0) + CHR$(67) [F9] "C"
|
|||
|
CHR$(0) + CHR$(68) [F10] "D"
|
|||
|
CHR$(0) + CHR$(71) [Home] "G"
|
|||
|
CHR$(0) + CHR$(72) [↑] Arrow "H"
|
|||
|
CHR$(0) + CHR$(73) [Page Up] "I"
|
|||
|
CHR$(0) + CHR$(75) [←] Arrow "K"
|
|||
|
CHR$(0) + CHR$(76) [5 NumberPad] "L" (NumLock off in QB64)
|
|||
|
CHR$(0) + CHR$(77) [→] Arrow "M"
|
|||
|
CHR$(0) + CHR$(79) [End] "O"
|
|||
|
CHR$(0) + CHR$(80) [↓] Arrow "P"
|
|||
|
CHR$(0) + CHR$(81) [Page Down] "Q"
|
|||
|
CHR$(0) + CHR$(82) [Insert] "R"
|
|||
|
CHR$(0) + CHR$(83) [Delete] "S"
|
|||
|
CHR$(0) + CHR$(84-93) [Shift] + F1-10
|
|||
|
CHR$(0) + CHR$(94-103) [Ctrl] + F1-10
|
|||
|
CHR$(0) + CHR$(104-113) [Alt] + F1-10
|
|||
|
CHR$(0) + CHR$(114-119) [Ctrl] + keypad
|
|||
|
CHR$(0) + CHR$(120-129) [Alt] + number
|
|||
|
CHR$(0) + CHR$(130 or 131) [Alt] + _/- or +/= "é" or "â"
|
|||
|
CHR$(0) + CHR$(133) [F11] "à"
|
|||
|
CHR$(0) + CHR$(134) [F12] "å"
|
|||
|
CHR$(0) + CHR$(135) [Shift] + [F11] "ç"
|
|||
|
CHR$(0) + CHR$(136) [Shift] + [F12] "ê"
|
|||
|
CHR$(0) + CHR$(137) [Ctrl] + [F11] "ë"
|
|||
|
CHR$(0) + CHR$(138) [Ctrl] + [F12] "è"
|
|||
|
CHR$(0) + CHR$(139) [Alt] + [F11] "ï"
|
|||
|
CHR$(0) + CHR$(140) [Alt] + [F12] "î"
|
|||
|
{{WhiteEnd}}
|
|||
|
:In '''QB64''', [[CVI]] can be used to get the [[_KEYDOWN]] 2-byte code value. Example: '''{{text|status <nowiki>=</nowiki> _KEYDOWN(CVI(CHR$(0) + "P"))|green}}'''
|
|||
|
|
|||
|
==Examples==
|
|||
|
|
|||
|
''Example 1:'' Clearing the keyboard buffer
|
|||
|
{{CodeStart}} '' ''
|
|||
|
DO: LOOP UNTIL INKEY$ = "" '' ''
|
|||
|
{{CodeEnd}}
|
|||
|
|
|||
|
|
|||
|
''Example 2:'' Entering a Ctrl + letter keypress combination.
|
|||
|
{{CodeStart}}
|
|||
|
{{Cl|PRINT}} "Press Ctrl + P to Print!"
|
|||
|
|
|||
|
DO: K$ = {{Cl|INKEY$}}: {{Cl|LOOP}} {{Cl|UNTIL}} K$ <> ""
|
|||
|
{{Cl|IF...THEN|IF}} K$ = {{Cl|CHR$}}(16) {{Cl|THEN}} {{Cl|PRINT}} "Ctrl + P was pressed! " + K$ {{Cl|ELSE}} {{Cl|PRINT}} K$ '' ''
|
|||
|
{{CodeEnd}}
|
|||
|
: ''Note:'' Other control key + letter combinations will print other [[ASCII]] control characters.
|
|||
|
|
|||
|
|
|||
|
''Example 3:'' In a keyboard read loop looking for uppercase "Y" or "N".
|
|||
|
{{CodeStart}} '' ''
|
|||
|
{{Cl|DO...LOOP|DO}}
|
|||
|
{{Cl|PRINT}} "Do you want to continue? (Y/N): "; 'semicolon saves position for user entry
|
|||
|
{{Cl|DO...LOOP|DO}}: K$ = {{Cl|UCASE$}}({{Cl|INKEY$}}) 'change any user key press to uppercase
|
|||
|
{{Cl|LOOP}} {{Cl|UNTIL}} K$ = "Y" {{Cl|OR (boolean)|OR}} K$ = "N"
|
|||
|
{{Cl|PRINT}} K$ 'print valid user entry
|
|||
|
{{Cl|IF...THEN|IF}} K$ = "N" {{Cl|THEN}} {{Cl|END}}
|
|||
|
{{Cl|LOOP}} '' ''
|
|||
|
{{CodeEnd}}
|
|||
|
|
|||
|
|
|||
|
''Example 4:'' Getting just number values entered by a user in an INKEY$ input loop.
|
|||
|
{{CodeStart}} '' ''
|
|||
|
{{Cl|LOCATE}} 10, 10: {{Cl|PRINT}} "Enter a number value: ";
|
|||
|
{{Cl|DO}}: {{Cl|SLEEP}}
|
|||
|
K$ = {{Cl|INKEY$}}
|
|||
|
{{Cl|IF}} K$ >= {{Cl|CHR$}}(48) {{Cl|AND (boolean)|AND}} K$ <= {{Cl|CHR$}}(57) {{Cl|THEN}} entry$ = entry$ + K$ ' numbers only
|
|||
|
L = {{Cl|LEN}}(entry$) ' check entry length for possible backspace
|
|||
|
{{Cl|IF}} K$ = {{Cl|CHR$}}(46) {{Cl|AND (boolean)|AND}} flag = 0 {{Cl|THEN}} entry$ = entry$ + K$: flag = 1: mark = L ' decimal point
|
|||
|
{{Cl|IF}} K$ = {{Cl|CHR$}}(8) {{Cl|AND (boolean)|AND}} L > 0 {{Cl|THEN}} ' backspace pressed and entry has a length
|
|||
|
entry$ = {{Cl|MID$}}(entry$, 1, L - 1) ' remove one character from entry$
|
|||
|
{{Cl|IF}} {{Cl|LEN}}(entry$) < mark {{Cl|THEN}} flag = 0 ' allow decimal point entry if other was removed.
|
|||
|
{{Cl|LOCATE}} {{Cl|CSRLIN}}, {{Cl|POS}}(0) - 1: {{Cl|PRINT}} {{Cl|SPACE$}}(1); ' remove end character from screen
|
|||
|
{{Cl|END IF}}
|
|||
|
{{Cl|LOCATE}} 10, 32: {{Cl|PRINT}} entry$; ' display entry to user (semicolon required for correct {{Cl|POS}})
|
|||
|
{{Cl|LOOP}} {{Cl|UNTIL}} K$ = {{Cl|CHR$}}(13) {{Cl|AND (boolean)|AND}} L > 0 'assures something is entered '' ''
|
|||
|
{{CodeEnd}}
|
|||
|
|
|||
|
: ''Explanation:'' [[SLEEP]] waits for a keypress. It also allows background programs to share the processor and it leaves the keypress in the buffer for INKEY$. Keyboard string number characters range from [[ASCII]] codes 48 to 57. Any other entry is ignored by the IF statement. A decimal point (code 46) entry is allowed once in the input. The flag value stops further decimal point additions. Backspacing (code 8) is also allowed if the entry has at least one character. The cursor column returned by [[POS]](0) reverts too after the end of the entry when printed each loop. The loop exits when [Enter] (code 13) is pressed and the entry has a length.
|
|||
|
|
|||
|
|
|||
|
''See also:''
|
|||
|
* [[_KEYHIT]], [[_KEYDOWN]], [[_MAPUNICODE]]
|
|||
|
* [[INPUT]], [[LINE INPUT]]
|
|||
|
* [[INPUT$]], [[INP]]
|
|||
|
* [[CHR$]], [[ASCII]]
|
|||
|
* [[ASC]], [[Scancodes]](keyboard)
|
|||
|
* [[Windows_Libraries#Hot_Keys_.28maximize.29|Windows hot keys]]
|
|||
|
|
|||
|
|
|||
|
{{PageNavigation}}
|