查询并检索系统事件。
语法
用法
result = ScreenEvent( [ event ] )
参数
返回值
如果有待检索的事件0,则返回-1.
说明
此函数从内部GfxLib事件队列返回最新的可用系统事件。“事件”是指任何鼠标或键盘活动,例如。
事件数据(如果可用)将被复制到缓冲区中指向应该被声明为
Event
查询事件如果有待检索的事件
0,则该函数返回
-1.如果
event 参数设置为
0(如果省略,则为默认值)
ScreenEvent将无法复制事件数据,并且不会将其从内部事件队列中取出。以这种方式调用函数可以有助于检查是否有未处理的事件,而无需实际获取它们。
{999796001}Note{999796002}
如果您收到KEY_PRESS,KEY_RELEASE或KEY_REPEAT事件,则不会清除键盘缓冲区。如果您在接收到事件后需要清除缓冲区,则需要手动清除。见
Inkey.
例子
''包含一些有用的定义的fbgfx.bi
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using fb ''常量和结构存储在lang fb中的FB命名空间中
#endif
Dim e As EVENT
ScreenRes 640, 480
Do
If (ScreenEvent(@e)) Then
Select Case e.type
Case EVENT_KEY_PRESS
If (e.scancode = SC_ESCAPE) Then
End
End If
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "未知键";
End If
Print "被按下(scancode" & e.scancode & ")"
Case EVENT_KEY_RELEASE
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "未知键";
End If
Print "被释放(scancode" & e.scancode & ")"
Case EVENT_KEY_REPEAT
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "未知键";
End If
Print "正在重复(scancode" & e.scancode & ")"
Case EVENT_MOUSE_MOVE
Print "鼠标移动到" & e.x & "," & e.y & "(三角洲" & e.dx & "," & e.dy & ")"
Case EVENT_MOUSE_BUTTON_PRESS
If (e.button = BUTTON_LEFT) Then
Print "剩下";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "对";
Else
Print "中间";
End If
Print "按钮"
Case EVENT_MOUSE_BUTTON_RELEASE
If (e.button = BUTTON_LEFT) Then
Print "剩下";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "对";
Else
Print "中间";
End If
Print "按钮发布"
Case EVENT_MOUSE_DOUBLE_CLICK
If (e.button = BUTTON_LEFT) Then
Print "剩下";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "对";
Else
Print "中间";
End If
Print "按钮双击"
Case EVENT_MOUSE_WHEEL
Print "鼠标滚轮移动到位置" & e.z
Case EVENT_MOUSE_ENTER
Print "鼠标移动到程序窗口中"
Case EVENT_MOUSE_EXIT
Print "鼠标移出程序窗口"
Case EVENT_WINDOW_GOT_FOCUS
Print "程序窗口得到了重点"
Case EVENT_WINDOW_LOST_FOCUS
Print "程序窗口丢失焦点"
Case EVENT_WINDOW_CLOSE
End
Case EVENT_MOUSE_HWHEEL
Print "水平鼠标滚轮移动到位置" & e.w
End Select
End If
Sleep 1
Loop
平台差异
- ScreenEvent不会在DOS版本中返回与窗口相关的事件,但会返回输入事件。
方言差异
与QB差别
参考