Referenz - SCREENEVENT
Syntax: SCREENEVENT [ (Ereignis) ]
Typ: Funktion
Kategorie: Eingabe/Ereignisverwaltung
SCREENEVENT gibt Informationen zu einem Systemereignis, welches das Grafikfenster betrifft, zurück.
- 'Ereignis' ist
Pointer (
ANY PTR) auf einen Datenpuffer, in dem die Informationen gespeichert werden sollen. Ausgegeben werden die Daten in Form des UDT (
user defined type) '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 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
#INCLUDE ist der Typ (als Element des
NAMESPACEs 'fb') verfügbar.
Diese Funktion gibt Informationen zu dem zuletzt aufgetretenen Systemereignis zurück, das in der GfxLib-Ereignistabelle eingetragen wurde. Ein Systemereignis ist eine Maus- oder Tastaturaktivität.
Sofern verfügbar werden die Informationen 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.
Folgende Bedeutung hat die erste INTEGER-Stelle (der Record .type des UDTs 'EVENT'):
(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 der Record '.scancode' den plattformunabhängigen Scancode der Taste. Ist dieser Taste ein ASCII-Code zugeordnet, so kann dieser aus dem Record '.ascii' gelesen werden, andernfalls hat diese Stelle den Wert 0. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 2 | EVENT_KEY_RELEASE | Eine gedrückte Taste wurde wieder losgelassen. Die Records '.scancode' und '.ascii' werden in gleicher Weise ausgefüllt wie bei EVENT_KEY_PRESS. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 3 | EVENT_KEY_REPEAT | Eine 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. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 4 | EVENT_MOUSE_MOVE | Die 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. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 5 | EVENT_MOUSE_BUTTON_PRESS | Einer 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. |
| 6 | EVENT_MOUSE_BUTTON_RELEASE | Einer der Mausbuttons wurde wieder losgelassen. Der Record '.button' wird in gleicher Weise ausgefüllt wie bei EVENT_MOUSE_BUTTON_PRESS. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 7 | EVENT_MOUSE_DOUBLE_CLICK | Einer der Mausbuttons wurde doppelt angeklickt. Der Record '.button' wird in gleicher Weise ausgefüllt wie bei EVENT_MOUSE_BUTTON_PRESS. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 8 | EVENT_MOUSE_WHEEL | Das Mausrad wurde benutzt. Die neue Position des Mausrads wird im Record '.z' eingetragen. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 9 | EVENT_MOUSE_ENTER | Die Maus wurde in das Programmfenster bewegt. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 10 | EVENT_MOUSE_EXIT | Die Maus wurde aus dem Programmfenster bewegt. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster den Fokus hat. |
| 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 Record '.w' eingetragen. Dieses Ereignis wird nur ausgewertet, wenn das Programmfenster (nur unter Windows) den Fokus hat. |
Beispiel:
#INCLUDE "fbgfx.bi"
DIM AS FB.EVENT PTR event
event = ALLOCATE(20)
SCREENRES 640, 480
DO
IF (SCREENEVENT(event)) Then
SELECT CASE event->type
CASE FB.EVENT_KEY_PRESS
IF (event->scancode = FB.SC_ESCAPE) THEN END
If (event->ascii > 0) THEN
PRINT "'" & event->ascii & "'";
ELSE
PRINT "eine unbekannte Taste";
End If
PRINT " wurde gedrueckt (Scancode " & event->scancode & ")"
CASE FB.EVENT_KEY_RELEASE
If (event->ascii > 0) THEN
PRINT "'" & event->ascii & "'";
ELSE
PRINT "eine unbekannte Taste";
End If
PRINT " wurde losgelassen (Scancode " & event->scancode & ")"
CASE FB.EVENT_KEY_REPEAT
If (event->ascii > 0) THEN
PRINT "'" & event->ascii & "'";
ELSE
PRINT "eine unbekannte Taste";
END IF
PRINT " wird gehalten (Scancode " & event->scancode & ")"
CASE FB.EVENT_MOUSE_MOVE
PRINT "Maus wurde bewegt nach " & event->x & ", " & event->y & _
" (delta " & event->dx & ", " & event->dy & ")"
CASE FB.EVENT_MOUSE_BUTTON_PRESS
IF (event->button = FB.BUTTON_LEFT ) THEN
PRINT "Die Linke";
ELSEIF (event->button = FB.BUTTON_RIGHT) THEN
PRINT "Die rechte";
ELSEIF (event->button = FB.BUTTON_X1) THEN
PRINT "Die X1";
ELSEIF (event->button = FB.BUTTON_X2) THEN
PRINT "Die X2";
ELSE
PRINT "Die mittlere";
END IF
PRINT " Maustaste wurde gedrueckt"
CASE FB.EVENT_MOUSE_BUTTON_RELEASE
IF (event->button = FB.BUTTON_LEFT ) THEN
PRINT "Die Linke";
ELSEIF (event->button = FB.BUTTON_RIGHT) THEN
PRINT "Die rechte";
ELSEIF (event->button = FB.BUTTON_X1) THEN
PRINT "Die X1";
ELSEIF (event->button = FB.BUTTON_X2) THEN
PRINT "Die X2";
ELSE
PRINT "Die mittlere";
END IF
PRINT " Maustaste wurde losgelassen"
CASE FB.EVENT_MOUSE_DOUBLE_CLICK
IF (event->button = FB.BUTTON_LEFT ) THEN
PRINT "Die Linke";
ELSEIF (event->button = FB.BUTTON_RIGHT) THEN
PRINT "Die rechte";
ELSE
PRINT "Die mittlere";
END IF
PRINT " Maustaste wurde doppelt gedrueckt"
CASE FB.EVENT_MOUSE_WHEEL
PRINT "Das Mausrad wurde verstellt auf " & event->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 1
LOOP
DEALLOCATE event ' reservierten Speicher wieder freigebenUnterschiede 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 | ||||
|---|---|---|---|---|
|
||||




FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!
Versionen