Skip to content

MULTIKEY


通过键盘扫描码检测按键状态。

语法

declare function Multikey ( byval scancode as long ) as long

用法

result = Multikey(scancode)

参数

scancode

要检查的按键的扫描码

返回值

若指定扫描码的按键被按下则返回 -1,否则返回 0

说明

Multikey 是一个函数,可随时通过扫描码检测任意按键的状态。若按键被按下则返回 -1,否则返回 0

使用 Multikey 时,键盘输入缓冲区不会被禁用;也就是说,按下的键将被存储,随后由你对 InkeyGetkeyInput 的下一次调用返回。这意味着当你完成使用 Multikey 时,必须手动清空键盘输入缓冲区,可使用以下方法:

start GeSHi

While Inkey <> "": Wend  '' loop until the keyboard input buffer is empty

end GeSHi

关于FreeBASIC内置键盘输入功能,请参阅 键盘输入(基础)

在使用 Multikey 时保持 Inkey 可用提供了更多灵活性,在通过 Screen (Graphics) 语句设置了窗口图形模式时,可用于检测点击窗口关闭按钮时返回的 Chr(255)+"k" 组合。有关接受的扫描码列表,请参阅 DOS键盘扫描码;这些扫描码在所有 FreeBASIC 支持的平台上均有效。

只要屏幕未锁定Multikey 在图形模式下应始终可用。但控制台中的支持取决于程序运行的平台,无法保证。

示例

start GeSHi

vb
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB '' Scan code constants are stored in the FB namespace in lang FB
#endif

Dim As Integer x, y

ScreenRes 640, 480

Color 2, 15

x = 320: y = 240
Do
    ' Check arrow keys and update the (x, y) position accordingly
    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
   
    ' Lock the page while we work on it
    ScreenLock
        ' Clear the screen and draw a circle at the position (x, y)
        Cls
        Circle(x, y), 30, , , , ,F
    ScreenUnlock
   
    Sleep 15, 1
   
    ' Run loop until user presses Escape
Loop Until MultiKey(SC_ESCAPE)

' Clear Inkey buffer
While Inkey <> "": Wend

Print "Press CTRL and H to exit..."

Do
    Sleep 25
   
    '' Stay in loop until user holds down CTRL and H at the same time
    If MultiKey(SC_CONTROL) And MultiKey(SC_H) Then Exit Do
Loop

end GeSHi

方言差异

  • -lang qb 方言中不可用,除非使用别名 __Multikey 引用。

与 QB 的差异

  • FreeBASIC 新增

另请参阅

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系