INKEY$ - QB64 Wiki

INKEY$

From QB64 Wiki

Revision as of 10:26, 9 October 2012 by Clippy (Talk | contribs)
(diff) ← Older revision | Current revision (diff) | Newer revision → (diff)
Jump to: navigation, search

The INKEY$ Function returns user input as ASCII STRING character(s) from the keyboard buffer.


Syntax:

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 window.
  • Returns can be evaluated as certain ASCII characters or codes.

' 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) '

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: code2 = ASC(press$, 2) Qbasic can read it using: code2 = ASC(RIGHT$(press$, 1))


Two Byte Ctrl, Alt and Shift + Function key combinations

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] "î"

In QB64, CVI can be used to get the _KEYDOWN 2-byte code value. Example: status = _KEYDOWN(CVI(CHR$(0) + "P"))

Examples

Example 1: Clearing the keyboard buffer

DO: LOOP UNTIL INKEY$ = ""


Example 2: Entering a Ctrl + letter keypress combination.

PRINT "Press Ctrl + P to Print!" DO: K$ = INKEY$: LOOP UNTIL K$ <> "" IF K$ = CHR$(16) THEN PRINT "Ctrl + P was pressed! " + K$ ELSE PRINT K$

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".

DO PRINT "Do you want to continue? (Y/N): "; 'semicolon saves position for user entry DO: K$ = UCASE$(INKEY$) 'change any user key press to uppercase LOOP UNTIL K$ = "Y" OR K$ = "N" PRINT K$ 'print valid user entry IF K$ = "N" THEN END LOOP


Example 4: Getting just number values entered by a user in an INKEY$ input loop.

LOCATE 10, 10: PRINT "Enter a number value: "; DO: SLEEP K$ = INKEY$ IF K$ >= CHR$(48) AND K$ <= CHR$(57) THEN entry$ = entry$ + K$ ' numbers only L = LEN(entry$) ' check entry length for possible backspace IF K$ = CHR$(46) AND flag = 0 THEN entry$ = entry$ + K$: flag = 1: mark = L ' decimal point IF K$ = CHR$(8) AND L > 0 THEN ' backspace pressed and entry has a length entry$ = MID$(entry$, 1, L - 1) ' remove one character from entry$ IF LEN(entry$) < mark THEN flag = 0 ' allow decimal point entry if other was removed. LOCATE CSRLIN, POS(0) - 1: PRINT SPACE$(1); ' remove end character from screen END IF LOCATE 10, 32: PRINT entry$; ' display entry to user (semicolon required for correct POS) LOOP UNTIL K$ = CHR$(13) AND L > 0 'assures something is entered

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:



Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page