Встроенная функция
Функция INKEY
Интерактивной программе нужна очередная клавиша, но останавливать ради неё всю работу нельзя. Функция INKEY извлекает следующую клавишу из очереди ввода без ожидания: если очередь пуста, результатом будет пустая строка, и цикл продолжит выполняться.
Где читается очередь
Функция читает очередь активной поверхности ввода. В обычной текстовой программе это область ввода IDE, а после открытия SCREEN 0 или SCREEN 1..10 — экранное окно. Источник клавиш определяется поверхностью, имеющей фокус; подробнее см. клавиатура, мышь и события.
Опрос не требует графической поверхности и не создаёт её. SLEEP без аргумента также извлекает клавишу из этой очереди.
Синтаксис и аргументы
INKEY()
Единственная форма вызова — INKEY(). Аргументов нет, но пустые скобки обязательны в записи вызова.
Что возвращает функция
Результат имеет тип STRING. Таблица показывает, как представляются обычная клавиша, специальная клавиша и отсутствие ввода.
| Ситуация | Результат |
|---|---|
| В очереди есть обычная печатная клавиша. | Возвращается её символ, например "A". |
| В очереди есть специальная клавиша. | Возвращается каноническое имя, например "LEFT", "ESC" или "F1". |
| В очереди нет клавиши. | Возвращается пустая строка "". |
Вызов извлекает только одно событие и сохраняет последующие события для следующих вызовов.
Очередь и другие способы чтения
Функция не показывает приглашение и не читает целую строку: ввод строки или нескольких значений выполняет оператор INPUT.
Обработчик ON KEY может получить событие раньше вызова функции. Уже обработанная клавиша удаляется из очереди и не возвращается последующим опросом. Текущее удержание клавиши проверяет KEYDOWN: чтение очереди сообщает события нажатия, а не состояние клавиши.
Диагностика
MB2004: вызов встроенной функцииINKEYполучил один или несколько аргументов.
Пример
DIM pressedKey AS STRING
pressedKey = INKEY()
IF pressedKey = "" THEN
PRINT "Клавиша пока не нажата"
ELSE
PRINT "Нажата клавиша: "; pressedKey
END IF
Пример делает один опрос и печатает результат. Пустая очередь не приостанавливает программу: пустая строка отличается от любого имени клавиши, и ветвь ELSE выполняется только при действительно нажатой клавише.