Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - SCREENEVENT

Referenz-Navigation

 

Syntax: SCREENEVENT [ (Ereignis) ]
Typ: Funktion
Kategorie: Benutzereingabe

SCREENEVENT gibt Informationen zu einem Systemereignis zurück, welches das Grafikfenster betrifft. Ein Systemereignis ist eine Maus- oder Tastaturaktivität. Das Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat.

Der Typ 'EVENT' ist folgendermaßen definiert:

TYPE EVENT FIELD = 1
  type         AS INTEGER
  UNION
    TYPE
      scancode AS INTEGER
      ascii    AS INTEGER
    END TYPE
    TYPE
      x        AS INTEGER
      y        AS INTEGER
      dx       AS INTEGER
      dy       AS INTEGER
    END TYPE
    button     AS INTEGER
    z          AS INTEGER
    w          AS INTEGER
  END UNION
END TYPE

Diese Definition kann direkt aus der fbgfx.bi übernommen werden; durch einfaches Einbinden der Datei mittels Befehlsreferenzeintrag#INCLUDE ist der Typ (als Element des BefehlsreferenzeintragNAMESPACEs 'FB') verfügbar.

Sofern verfügbar werden die Informationen über das Systemereignis an die Adresse kopiert, auf die der Pointer 'Ereignis' zeigt. Dieser Pointer muss auf einen Speicherbereich zeigen, der mindestens 20 Bytes lang ist, da sonst Programmdaten überschrieben werden können, was zu unerwünschten Ergebnissen wie Programmabsturz führen kann.

In die ersten vier Bytes des Puffers wird im BefehlsreferenzeintragINTEGER-Format die ID des Ereignisses geschrieben, d. h. eine Zahl, die angibt, welches Ereignis aufgetreten ist. Welche Zahl welches Ereignis beschreibt, kann aus der Tabelle unten eingesehen werden.
Die restlichen 16 Bytes (vier INTEGER-Stellen) werden mit Informationen befüllt, die vom Typ des Ereignisses abhängig sind.
Generell ist es sinnvoll, auf den Speicherbereich wie auf einen EVENT PTR zuzugreifen, da so aussagekräftige Bezeichner für die Speicherstellen zur Verfügung stehen.

Wenn der Parameter 'Ereignis' ausgelassen wird, können keine Informationen kopiert werden; daher werden auch keine Ereignisse aus der Gfxlib-Ereignistabelle entfernt. Ein Aufruf von SCREENEVENT ohne Parameter ist daher eine gute Möglichkeit, um zu prüfen, ob ein Ereignis aufgetreten ist, ohne diese tatsächlich abzufragen und auszuwerten, da der Rückgabewert angibt, ob ein relevantes Ereignis aufgetreten ist.

Die Bedeutung des Records '.type' wird im Folgenden aufgelistet. Bitte beachten Sie, dass die angegebenen Konstanten in der fbgfx.bi ebenfalls Element des NAMESPACEs 'FB' sind.

EreignisnummerKonstante in der fbgfx.biBedeutung
1EVENT_KEY_PRESSDieses Ereignis wird zurückgegeben, wenn eine Taste auf der Tastatur gedrückt wurde. In diesem Fall enthält der Record '.scancode' den plattformunabhängigen Scancode der Taste. Ist der Taste ein ASCII-Code zugeordnet, so kann dieser aus dem Record '.ascii' gelesen werden, andernfalls hat '.ascii' den Wert 0.
2EVENT_KEY_RELEASEEine gedrückte Taste wurde wieder losgelassen. Die Records '.scancode' und '.ascii' werden in gleicher Weise ausgefüllt wie bei EVENT_KEY_PRESS.
3EVENT_KEY_REPEATEine Taste wird so lange gedrückt gehalten, bis sie als wiederholter Tastenanschlag behandelt wird. Die Records '.scancode' und '.ascii' werden in gleicher Weise ausgefüllt wie bei EVENT_KEY_PRESS.
4EVENT_MOUSE_MOVEDie Maus wurde bewegt, während sie sich auf dem Programmfenster befand.
Die Records '.x' und '.y' enthalten die neuen Koordinaten des Mauszeigers.
Die Records '.dx' und '.dy' enthalten die Differenz der alten Koordinaten zu den Neuen, geben also an, wie weit die Maus bewegt wurde.
5EVENT_MOUSE_BUTTON_PRESSEiner der Mausbuttons wurde gedrückt. Der Record '.button' gibt an, welcher das war; 1 symbolisiert dabei den linken, 2 den rechten und 3 den mittleren Mausbutton.
Sie können auch die in der fbgfx.bi vordefinierten Konstanten 'BUTTON_LEFT', 'BUTTON_RIGHT' und 'BUTTON_MIDDLE' verwenden. Bitte beachten Sie, dass auch diese Konstanten Elemente des NAMESPACEs 'FB' sind.
6EVENT_MOUSE_BUTTON_RELEASEEiner der Mausbuttons wurde wieder losgelassen. Der Record '.button' wird in gleicher Weise ausgefüllt wie bei EVENT_MOUSE_BUTTON_PRESS.
7EVENT_MOUSE_DOUBLE_CLICKEiner der Mausbuttons wurde doppelt angeklickt. Der Record '.button' wird in gleicher Weise ausgefüllt wie bei EVENT_MOUSE_BUTTON_PRESS.
8EVENT_MOUSE_WHEELDas Mausrad wurde benutzt. Die neue Position des Mausrads wird im Record '.z' eingetragen.
9EVENT_MOUSE_ENTERDie Maus wurde in das Programmfenster bewegt.
10EVENT_MOUSE_EXITDie Maus wurde aus dem Programmfenster bewegt.
11EVENT_WINDOW_GOT_FOCUSDas Programmfenster hat den Fokus bekommen (es wurde also zum aktiven Fenster).
12EVENT_WINDOW_LOST_FOCUSDas Programmfenster hat den Fokus verloren (es ist also in den Hintergrund getreten, da ein anderes Fenster jetzt den Fokus hat).
13EVENT_WINDOW_CLOSEDer User hat versucht das Fenster zu schließen (z. B. über den Schließen-Button in der Titelleiste oder über das Kontextmenü des Fensters in der Taskleiste).
14EVENT_MOUSE_HWHEELDas horizontale Mausrad wurde benutzt. Die neue Position des Mausrads wird im Record '.w' eingetragen.

Beispiel:

#Include "fbgfx.bi"

Dim evt As FB.EVENT

Function x_Button(x As Integer) As Integer 'welcher Button
  If     x = FB.BUTTON_LEFT  Then
    Print "Die linke";
  ElseIf x = FB.BUTTON_RIGHT Then
    Print "Die rechte";
  ElseIf x = FB.BUTTON_MIDDLE Then
    Print "Die mittlere";
  ElseIf x = FB.BUTTON_X1 Then
    Print "Die X1";
  ElseIf x = FB.BUTTON_X2 Then
    Print "Die X2";
  End If
  Return 0
End Function

ScreenRes 640, 480
Width 640\8, 480\16

Do
  If ScreenEvent(@evt) Then
    Select Case evt.type
      Case FB.EVENT_KEY_PRESS
        If evt.scancode = FB.SC_ESCAPE Then End
        If evt.ascii > 0 Then
          Print "'" & evt.ascii & "'";
        Else
          Print "eine unbekannte Taste";
        End If
        Print " wurde gedrueckt (Scancode " & evt.scancode & ")"

      Case FB.EVENT_KEY_RELEASE
        If evt.ascii > 0 Then
          Print "'" & evt.ascii & "'";
        Else
          Print "eine unbekannte Taste";
        End If
        Print " wurde losgelassen (Scancode " & evt.scancode & ")"

      Case FB.EVENT_KEY_REPEAT
        If evt.ascii > 0 Then
          Print "'" & evt.ascii & "'";
        Else
          Print "eine unbekannte Taste";
        End If
        Print " wird gehalten (Scancode " & evt.scancode & ")"

      Case FB.EVENT_MOUSE_MOVE
        Print "Maus wurde bewegt nach " & evt.x & ", " & evt.y & _
        " (delta " & evt.dx & ", " & evt.dy & ")"

      Case FB.EVENT_MOUSE_DOUBLE_CLICK
        Locate CsrLin -2,1
        x_Button(evt.button)
        Print " Maustaste wurde doppelt gedrueckt"

      Case FB.EVENT_MOUSE_BUTTON_PRESS
        x_Button(evt.button)
        Print " Maustaste wurde gedrueckt"

      Case FB.EVENT_MOUSE_BUTTON_RELEASE
        x_Button(evt.button)
        Print " Maustaste wurde losgelassen"

      Case FB.EVENT_MOUSE_WHEEL
        Print "Das Mausrad wurde verstellt auf " & evt.z

      Case FB.EVENT_MOUSE_ENTER
        Print "Die Maus wurde in das Programmfenster bewegt"

      Case FB.EVENT_MOUSE_EXIT
        Print "Die Maus wurde aus dem Programmfenster bewegt"

      Case FB.EVENT_WINDOW_GOT_FOCUS
        Print "Das Programmfenster hat den Fokus erhalten"

      Case FB.EVENT_WINDOW_LOST_FOCUS
        Print "Das Programmfenster hat den Fokus verloren"

      Case FB.EVENT_WINDOW_CLOSE
        End
    End Select
  End If

  Sleep 10
Loop

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v0.17

Siehe auch:
BefehlsreferenzeintragSCREENRES, BefehlsreferenzeintragMULTIKEY, BefehlsreferenzeintragINKEY, BefehlsreferenzeintragGETMOUSE, BefehlsreferenzeintragNAMESPACE, BefehlsreferenzeintragUSING (NAMESPACE), BefehlsreferenzeintragGrafik


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 31.07.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 13.06.2015 von Redakteurnemored gespeichert.
  Versionen Versionen