Referenz - SCREENEVENT
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.
- 'Ereignis' ist ein Pointer (ANY PTR) auf einen Datenpuffer, in dem die Informationen gespeichert werden sollen. Ausgegeben werden die Daten in Form des UDTs 'EVENT'. Wird dieser Parameter ausgelassen, so wird nichts kopiert.
- Der Rückgabewert ist entweder -1, wenn Ereignisse aufgetreten sind, oder 0, wenn dies nicht der Fall ist.
Der Typ 'EVENT' ist folgendermaßen definiert:
TYPE EVENT FIELD = 1
type AS LONG
UNION
TYPE
scancode AS LONG
ascii AS LONG
END TYPE
TYPE
x AS LONG
y AS LONG
dx AS LONG
dy AS LONG
END TYPE
button AS LONG
z AS LONG
w AS LONG
END UNION
END TYPE
Diese Definition kann direkt aus der fbgfx.bi übernommen werden; durch einfaches Einbinden der Datei mittels #INCLUDE ist der Typ (als Element des NAMESPACEs '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 INTEGER-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 Attributs '.type' wird im Folgenden aufgelistet. Bitte beachten Sie, dass die angegebenen Konstanten in der fbgfx.bi ebenfalls Element des NAMESPACEs 'FB' sind.
Ereignisnummer | Konstante in der fbgfx.bi | Bedeutung |
---|---|---|
1 | EVENT_KEY_PRESS | Dieses Ereignis wird zurückgegeben, wenn eine Taste auf der Tastatur gedrückt wurde. In diesem Fall enthält das Attribut '.scancode' den plattformunabhängigen Scancode der Taste. Ist der Taste ein ASCII-Code zugeordnet, so kann dieser aus dem Attribut '.ascii' gelesen werden, andernfalls hat '.ascii' den Wert 0. |
2 | EVENT_KEY_RELEASE | Eine gedrückte Taste wurde wieder losgelassen. Die Attribute '.scancode' und '.ascii' werden in gleicher Weise ausgefüllt wie bei EVENT_KEY_PRESS. |
3 | EVENT_KEY_REPEAT | Eine Taste wird so lange gedrückt gehalten, bis sie als wiederholter Tastenanschlag behandelt wird. Die Attribute '.scancode' und '.ascii' werden in gleicher Weise ausgefüllt wie bei EVENT_KEY_PRESS. |
4 | EVENT_MOUSE_MOVE | Die Maus wurde bewegt, während sie sich auf dem Programmfenster befand. Die Attribute '.x' und '.y' enthalten die neuen Koordinaten des Mauszeigers. Die Attribute '.dx' und '.dy' enthalten die Differenz der alten Koordinaten zu den Neuen, geben also an, wie weit die Maus bewegt wurde. |
5 | EVENT_MOUSE_BUTTON_PRESS | Einer der Mausbuttons wurde gedrückt. Der Attribute '.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. |
6 | EVENT_MOUSE_BUTTON_RELEASE | Einer der Mausbuttons wurde wieder losgelassen. Das Attribut '.button' wird in gleicher Weise ausgefüllt wie bei EVENT_MOUSE_BUTTON_PRESS. |
7 | EVENT_MOUSE_DOUBLE_CLICK | Einer der Mausbuttons wurde doppelt angeklickt. Das Attribut '.button' wird in gleicher Weise ausgefüllt wie bei EVENT_MOUSE_BUTTON_PRESS. |
8 | EVENT_MOUSE_WHEEL | Das Mausrad wurde benutzt. Die neue Position des Mausrads wird im Attribut '.z' eingetragen. |
9 | EVENT_MOUSE_ENTER | Die Maus wurde in das Programmfenster bewegt. |
10 | EVENT_MOUSE_EXIT | Die Maus wurde aus dem Programmfenster bewegt. |
11 | EVENT_WINDOW_GOT_FOCUS | Das Programmfenster hat den Fokus bekommen (es wurde also zum aktiven Fenster). |
12 | EVENT_WINDOW_LOST_FOCUS | Das Programmfenster hat den Fokus verloren (es ist also in den Hintergrund getreten, da ein anderes Fenster jetzt den Fokus hat). |
13 | EVENT_WINDOW_CLOSE | Der 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). |
14 | EVENT_MOUSE_HWHEEL | Das horizontale Mausrad wurde benutzt. Die neue Position des Mausrads wird im Attribut '.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:
SCREENRES, MULTIKEY, INKEY, GETMOUSE, NAMESPACE, USING (NAMESPACE), Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|