Встроенная функция
Функция 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
Цикл завершается на первом найденном нажатии. Если бы проверка стояла в теле без выхода, следующая итерация уже не нашла бы это событие.