ScreenEvent
 
Запрашивает и получает системные события.

Синтаксис

Declare Function ScreenEvent ( ByVal event As Any Ptr = 0 ) As Integer

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

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, но возвращает события ввода.

Различия диалектов

  • Не доступно в диалекте -lang qb.

Отличия от QB

  • Новое в FreeBASIC

См. также