Обнаруживает статус клавиш по сканкоду клавиатуры.
Синтаксис
Использование
result = MultiKey(scancode)
Параметры
Возвращаемое значение
Возвращает
-1 если клавиша для указанного
сканкода нажата, в противном случае
возвращает
0.
Описание
MultiKey - это функция, которая будет определять состояние любой
клавиши, определяемой сканкодом в любое время. Она будет возвращать
-1
если клавиша нажата, в противном случае она будет возвращать
0.
Входной буфер клавиатуры не отключается при использовании
MultiKey;
то есть нажатые ключи будут храниться и впоследствии вернутся при вашем
следующем вызове
Inkey. Это означает,
что вы должны освободить
Inkey
вручную, когда вы закончите использовать
MultiKey, используя
что-то вроде следующего метода:
While Inkey <> "": Wend '' loop until the Inkey buffer is empty
Работа
Inkey во время использования
MultiKey
обеспечивает большую гибкость и может быть полезно для обнаружения
Chr(255)+"k"
(нажатие на кнопку закрытия окна), если оконный графический режим был
установлен с помощью оператора
Screen.
Для получения списка принятых сканкодов, смотрите
DOS сканкоды клавиатуры; они гарантированно будут действительны для всех
FreeBASIC поддерживаемых платформ.
MultiKey всегда должен работать в графическом режиме, при
условии, что экран
Разблокирован.
Поддержка в консоли зависит от платформы, на которой программа запускается и
не может быть гарантирована.
Пример
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB '' Константы
сканкодов хранятся в пространстве имен FB в lang FB
#endif
Dim As Integer x, y
ScreenRes 640, 480
Color 2, 15
x = 320: y = 240
Do
' Проверяем клавиши со стрелками
и обновляем позицию (x, y) соотвественно
If MultiKey(SC_LEFT ) And x > 0 Then x = x - 1
If MultiKey(SC_RIGHT) And x < 639 Then x = x + 1
If MultiKey(SC_UP ) And y > 0 Then y = y - 1
If MultiKey(SC_DOWN ) And y < 479 Then y = y + 1
' Блокировка страницы в то время
пока мы работаем с ней
ScreenLock
' Очистка
экрана и рисование круга в позиции (x, y)
Cls
Circle(x, y), 30, , , , ,F
ScreenUnlock
Sleep 15, 1
' Цикл выполняется, пока
пользователь не нажмет Escape
Loop Until MultiKey(SC_ESCAPE)
' Очистка буфера Inkey
While Inkey <> "": Wend
Print "Press CTRL and H to exit..."
Do
Sleep 25
'' Пребывание в цикле, пока
пользователь не зажмет CTRL+H
If MultiKey(SC_CONTROL) And MultiKey(SC_H) Then Exit Do
Loop
Различия диалектов
- Не доступно в диалекте -lang qb
, но есть псевдоним __Multikey.
Отличия от QB
См. также