Запрашивает и получает системные события.
Синтаксис
Использование
result = ScreenEvent( [ event ] )
Параметры
event
Указывает буфер, где функция должна хранить данные
событий.
Возвращаемое значение
Возвращает -1 ,если имеются ожидаемые события для извлечения, 0
в противном случае.
Описание
Эта функция возвращает последние доступные системные события из очереди
событий внутренней GfxLib. Под "event" мы подразумеваем любую активность
мыши или клавиатуры, например.
Данные события (если таковые имеются) будут скопированы в указанный буфер,
который должен быть объявлен как
Event
Запросы событий
Функция возвращает
-1 , если имеются ожидаемые
события для извлечения,
0 в противном случае. Если параметр
event
установлен в
0 (по умолчанию, если опущен параметр)
ScreenEvent
не сможет скопировать данные события, и они не будет извлечены из очереди
внутренних событий. Вызов функции таким образом, может быть полезен для
проверки: имеются ли ожидаемые события без их извлечения.
Примечание
Если вы получаете событие KEY_PRESS, KEY_RELEASE или KEY_REPEAT,
оно не очищает буфер клавиатуры. Если вам нужен очищенный буфер после того,
как вы получили событие, вам будет нужно очистить его вручную. См.
Inkey.
Пример
'' Включаем fbgfx.bi для некоторых полезных
определений
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using fb '' константы
и структуры хранятся в пространстве имен FB в lang 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 "unknown key";
End If
Print " was pressed (scancode " & e.scancode & ")"
Case EVENT_KEY_RELEASE
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "unknown key";
End If
Print " was released (scancode " & e.scancode & ")"
Case EVENT_KEY_REPEAT
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "unknown key";
End If
Print " is being repeated (scancode " & e.scancode & ")"
Case EVENT_MOUSE_MOVE
Print "mouse moved to " & e.x & "," & e.y & " (delta " & e.dx & "," & e.dy & ")"
Case EVENT_MOUSE_BUTTON_PRESS
If (e.button = BUTTON_LEFT) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "right";
Else
Print "middle";
End If
Print " button pressed"
Case EVENT_MOUSE_BUTTON_RELEASE
If (e.button = BUTTON_LEFT) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "right";
Else
Print "middle";
End If
Print " button released"
Case EVENT_MOUSE_DOUBLE_CLICK
If (e.button = BUTTON_LEFT) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "right";
Else
Print "middle";
End If
Print " button double clicked"
Case EVENT_MOUSE_WHEEL
Print "mouse wheel moved to position " & e.z
Case EVENT_MOUSE_ENTER
Print "mouse moved into program window"
Case EVENT_MOUSE_EXIT
Print "mouse moved out of program window"
Case EVENT_WINDOW_GOT_FOCUS
Print "program window got focus"
Case EVENT_WINDOW_LOST_FOCUS
Print "program window lost focus"
Case EVENT_WINDOW_CLOSE
End
Case EVENT_MOUSE_HWHEEL
Print "horizontal mouse wheel moved to position " & e.w
End Select
End If
Sleep 1
Loop
Различия платформ
- ScreenEvent не возвращает оконные события в версии DOS,
но возвращает события ввода.
Различия диалектов
Отличия от QB
См. также