Axiom Справочник языка

Встроенная функция

Функция 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 выполняется только при действительно нажатой клавише.

Запускаемые примеры

См. также