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

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

Функция KEYPRESS

Однократное действие — подтвердить выбор, открыть меню или переключить режим — должно сработать ровно один раз на одно нажатие. Функция KEYPRESS ищет непрочитанное нажатие указанной клавиши, при успехе возвращает TRUE и удаляет найденное событие из очереди.

Место среди функций ввода

Текущее удержание проверяет KEYDOWN, а строку следующей клавиши возвращает INKEY. KEYPRESS занимает промежуточное положение: её интересует именно факт нажатия конкретной клавиши, и после успешного ответа это событие больше не повторится.

Функция читает очередь активной поверхности ввода: текстовой области IDE либо окна SCREEN 0 или SCREEN 1..10. Направляйте ввод в окно программы; правила фокуса описаны в разделе клавиатуры и мыши.

Синтаксис и аргумент

KEYPRESS(<клавиша>)
АргументТипОписание
<клавиша>STRINGИмя клавиши. Используются те же имена, что в KEYDOWN и ON KEY; полный перечень приведён в таблице имён клавиш. Например "LEFT", "ESCAPE", "PAGE UP", "A".

Что возвращает функция

Результат имеет тип BOOLEAN.

  • TRUE, если в очереди есть ещё не прочитанное нажатие указанной клавиши. Это нажатие удаляется из очереди.
  • FALSE, если такого нажатия сейчас нет, имя пустое или среда выполнения не предоставляет клавиатурную очередь.

Из очереди удаляется только первое подходящее событие. Остальные клавиши, включая повторные нажатия той же клавиши, сохраняют порядок и могут быть прочитаны функциями INKEY, KEYPRESS или обработчиком ON KEY.

PRINT KEYPRESS("LEFT")
PRINT KEYPRESS("LEFT")

Если в очереди есть ровно одно нажатие LEFT, первый вызов возвращает TRUE, а следующий — FALSE.

Нажатие и удержание

ФункцияЧто проверяетЧитает очередь
KEYPRESS("LEFT")Было ли отдельное нажатие LEFTДа, подходящее событие удаляется
KEYDOWN("LEFT")Удерживается ли LEFT прямо сейчасНет

Проверка не требует графического окна.

Модификаторы

В сочетании со знаком + последняя часть обозначает клавишу события, а все предыдущие части должны удерживаться в момент вызова. Вызов KEYPRESS("CTRL+ALT+DELETE") ищет событие DELETE при удержании CTRL и ALT; найденное событие DELETE удаляется.

IF KEYPRESS("CTRL+LEFT") THEN
    PRINT "CTRL+LEFT"
END IF

IF KEYPRESS("CTRL+ALT+DELETE") THEN
    PRINT "CTRL+ALT+DELETE"
END IF

Аналогично, в KEYPRESS("CTRL+F+A+X") удерживаются CTRL, F и A, а нажатием завершающей клавиши служит X. Проверка удержания всех четырёх выполняется через KEYDOWN.

Electron IDE передаёт модифицированные клавиши из консоли, окна CANVAS или нативного окна SCREEN, имеющего фокус. Клавиша Windows в пользовательский ввод программы не передаётся.

Диагностика

  • MB2004: вызов встроенной функции KEYPRESS получен без аргумента или с лишними аргументами.
  • MB2003: аргумент встроенной функции KEYPRESS нельзя связать как строку.

Пример одноразового нажатия

FOR i = 1 TO 20000
    IF KEYPRESS("ESCAPE") THEN
        PRINT "ESC pressed once"
        EXIT FOR
    END IF
NEXT

Цикл завершается на первом найденном нажатии. Если бы проверка стояла в теле без выхода, следующая итерация уже не нашла бы это событие.

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

См. также