MULTIKEY
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgMultikey
- 最后更新: 2023-07-09
通过键盘扫描码检测按键状态。
语法
declare function Multikey ( byval scancode as long ) as long用法
result = Multikey(scancode)参数
scancode
要检查的按键的扫描码。
返回值
若指定扫描码的按键被按下则返回 -1,否则返回 0。
说明
Multikey 是一个函数,可随时通过扫描码检测任意按键的状态。若按键被按下则返回 -1,否则返回 0。
使用 Multikey 时,键盘输入缓冲区不会被禁用;也就是说,按下的键将被存储,随后由你对 Inkey、Getkey 或 Input 的下一次调用返回。这意味着当你完成使用 Multikey 时,必须手动清空键盘输入缓冲区,可使用以下方法:
start GeSHi
While Inkey <> "": Wend '' loop until the keyboard input buffer is emptyend 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
Loopend GeSHi
方言差异
- 在 -lang qb 方言中不可用,除非使用别名
__Multikey引用。
与 QB 的差异
- FreeBASIC 新增
另请参阅
返回 目录