MultiKey
 
Обнаруживает статус клавиш по сканкоду клавиатуры.

Синтаксис

Declare Function MultiKey ( ByVal scancode As Integer ) As Integer

Использование

result = MultiKey(scancode)

Параметры

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

  • Новое в FreeBASIC

См. также