2.7 Eingaben durch den Nutzer
2.7.2 Direkte Abfrage der Tastatur: InKey$, GetKey, GetKeyLP, GetKeyState 2.7.3 Messageboxen: MsgBox, WarningBox, ErrorBox, QuestionBox ^2.7.1 Eingabe von Text und ZahlenIn vielen Fällen muss der Nutzer während des laufenden Programms bestimmte Werte oder andere Daten eingeben. In einem objektorientierten BASIC-Programm werden dazu Textobjekte (Klassen Memo oder InputLine) oder Objekte der Klasse Number (Anzeige und Eingabe von Zahlen) verwendet. Diese Objekte werden ausführlich im Objekthandbuch beschrieben.
Manchmal ist es jedoch gewünscht Daten direkt auf dem Grafikbildschirm einzugeben oder es lohnt sich nicht, wegen einer kurzen Eingabe eine Dialogbox mit einem Textobjekt zu programmieren. Für diesen Zweck gibt es im Standard-BASIC den Befehl INPUT (Eingabe direkt auf dem Grafikbildschirm) und in R-BASIC zusätzlich den Befehl InputBox (Eingabe in einer Dialogbox). Wenn Sie einzelne Zeichen von der Tastatur einlesen wollen, stehen Ihnen die Funktionen InKey$, GetKey, GetKeyLP und GetKeyState zur Verfügung, die im nächsten Abschnitt beschrieben werden.
INPUTDer Befehl INPUT ( = Eingabe) fordert vom Nutzer eine oder mehrere Werte an. Die Eingabe erfolgt dabei direkt auf dem Schirm. Zum Editieren stehen die Cursortasten (Pfeiltasten) links und rechts, Backspace, Pos1 und Ende zur Verfügung.Syntax: INPUT [infoString;] var [, var] [, var]
Beispiele: |
INPUT A |
INPUT "Bitte geben Sie Ihr Alter ein:"; A |
C$ = "Was nun?"
INPUT C$; A$ ' Eingabe der Variable A$
' Auf dem Schirm erscheint "Was nun?"
|
INPUT C$, A$ ' Eingabe der Variablen C$ UND A$
' weil hinter c$ ein Koma steht.
' Auf dem Schirm erscheint ein Fragezeichen.
|
Hinweise:
InputBoxDer Befehl InputBox (Eingabe in eine DialogBox) fordert vom Nutzer eine oder mehrere Werte an. Die Eingabe erfolgt dabei in einer Dialog-Box. Es stehen alle GEOS-typischen Editierfunktionen, einschließlich Drag & Drop (Verschieben mit der rechten Maustaste) zur Verfügung. Syntax: InputBox infoString; var [, var] [, var]
Beispiel: |
InputBox "Bitte geben Sie Ihr Alter ein:"; A |
|
Hinweise: siehe INPUT
2.7.2 Direkte Abfrage der TastaturIn vielen Fällen werden Sie zur Eingabe von Text oder Zahlen die entsprechenden R-BASIC Objekte (Klassen Memo, InputLine oder Number) verwenden. Wenn Sie jedoch auf einzelne Zeichen, die über die Tastatur eingegeben werde, reagieren wollen, sollten Sie einen Tastaturhandler (OnKeyPressed Handler) schreiben. Tastaturhandler sind im Handbuch "Spezielle Themen", Kapitel 14 (Arbeit mit der Tastatur) beschrieben.
Für einfache Fälle und zur Wahrung der Abwärtskompatibilität stehen Ihnen zusätzlich die Funktionen InKey$, GetKey, GetKeyLP und GetKeyState zur Verfügung, die im Folgenden beschrieben werden.
InKey$Die Funktion InKey$ (Input Keyboard = Tastatureingabe) liest ein einzelnes ASCII-Zeichen von der Tastatur ein. Bestimmte Steuerzeichen werden ebenfalls erkannt. InKey$ liefert einen Leerstring, wenn keine Taste gedrückt ist oder die Taste bereits abgefragt wurde.Syntax: <stringVar> = InKey$ Die in der Tabelle aufgeführten symbolischen Konstanten stehen zur Verfügung, wenn die KeyCodes-Library eingebunden wird (siehe 2. Beispiel).
Beispiele: Warten bis Enter gedrückt wurde |
WHILE InKey$ <> Chr$(13) : WEND |
|
Einbinden des KeyCodes Library und warten bis Enter gedrückt wurde |
INCLUDE "KeyCodes" .... WHILE InKey$ <> Chr$(ASC_ENTER) : WEND |
Unter einem objektorientierten System wie GEOS sollten Sie diesen Weg vermeiden. Insbesondere die ständige Abfrage der Tastatur in einer Schleife bremst das System massiv aus und erhöht die CPU-Last.
GetKeyStateUm die aktuell gedrückten Modifier-Tasten (Shift, Ctrl, Alt) und den LockStatus (ShiftLock, NumLock, ScrollLock (=Rollen) ) abzufragen, bietet R-BASIC die Funktion GetKeyState. Kenntnisse von Bit- und logischen Operationen (siehe Kapitel 2.3.4 und 2.3.5) sind für die Anwendung dieser Funktion erforderlich.
Tabellen: Bedeutung der Bits, die von GetKeyState geliefert werden
Beispiele: |
' Abfrage ob eine Shift-Taste gedrückt ist IF GetKeyState AND ( KS_RSHIFT OR KS_LSHIFT ) THEN .... |
' Abfrage ob die NUM-Lock Taste gedrückt ist IF GetKeyState AND KS_NUM_LOCK THEN .... |
' Ausblenden des Lock-Staus , nur Shift-Status beachten shiftState = GetKeyState AND &hFF |
Hinweis: Diese Informationen werden auch direkt an den OnKeyPressed Handler von Objekten übergeben (Parameter keyState). Im Handbuch "Spezielle Themen", Kapitel 14, finden Sie ausführliche Informationen dazu.
GetKeyDie Funktion GetKey ( = Hole Taste ) fragt die Tastatur ab, ob gerade eine Taste gedrückt ist und liefert den GEOS-Tasten-Code. Dies kann ein ASCII-Code sein. Bei Tasten, denen kein ASCII-Zeichen zugeordnet ist (Steuertasten) , ist es ein erweiterter Code ( > 255 ).Im Gegensatz zu InKey$ liefert GetKey immer die aktuell gedrückte Taste, auch wenn diese bereits mehrfach angefragt wurde. Syntax: <numVar> = GetKey Beispiele: |
' Warten bis irgendeine Taste gedrückt wurde WHILE GetKey = 0 : WEND |
' Verzweigen, je nach Teste
' Wir verwenden mit WHILE TRUE ... WEND eine "Endlosschleife"
' die beim Drücken der Taste '3' verlassen wird
CLS
WHILE TRUE
On GetKey SWITCH
case ASC("0"): print "Null": End case
case ASC("1"): print "Eins": End case
case ASC("2"): print "Zwei": End case
case ASC("3"): print "ENDE.": BREAK ' Schleife verlassen
End Switch
WEND
|
|
Für die meisten der Steuertasten stehen symbolischen Konstanten zur Verfügung, wenn die KeyCodes-Library eingebunden wird. Beispiel: |
' Warten bis die Enter-Taste gedrückt ' und wieder losgelassen wurde INCLUDE "KeyCodes" CLS Print "wait..." While GetKey <> Key_Enter : Wend While GetKey = Key_Enter : Wend Print "Fertig." ... |
GetKeyLPGetKeyLP (Get Key, Last Pressed) tut weitgehend das gleiche, wie GetKey. Der einzige Unterschied ist, dass GetKeyLP, wenn es erstmalig nach dem Loslassen einer Taste gerufen wird, deren Tastencode noch liefert.Das bedeutet konkret:
Verwenden Sie GetKeyLP, wenn Sie sicherstellen wollen, dass auch kurze Tastendrücke registriert werden sollen, auch wenn Ihr Programm "beschäftigt" ist. Dass kann z.B. eine umfangreiche Berechnung oder der Delay-Befehl sein. Syntax:<numVar> = GetKeyLP Beispiel |
DIM x
x = GetKeyLP ' Tastenpuffer löschen, falls nötig
Print "Drücken Sie eine beliebige Taste zu Beenden!"
Delay 60 ' Eine Sekunde Verzögerungszeit
While GetKeyLP = 0
Print "*"
Delay ' Warten bis eine Sekunde vorbei ist
Wend
Print "Fertig"
|
^2.7.3 MessageboxenUm auf einfache Weise Meldungen auszugeben, verfügt R-BASIC über die Funktionen MsgBox, WarningBox, ErrorBox und QuestionBox.MsgBoxMsgBox gibt eine einfache Meldung in einer Dialogbox aus.Syntax: MsgBox "InfoText" Beispiele: |
MsgBox "Der Prozess ist abgeschlossen" MsgBox A$ + " ist herausgekommen!" |
WarningBoxWarningBox gibt eine einfache Warnung in einer Dialogbox aus.Syntax: WarningBox "InfoText" Beispiele: |
WarningBox "Es konnten nicht alle Daten gesichert werden." WarningBox A$ + " ist gefährlich" |
ErrorBoxErrorBox gibt eine einfache Fehlermeldung in einer Dialogbox aus.Syntax: ErrorBox "InfoText" Beispiele: |
ErrorBox "Es ist ein Fehler aufgetreten" ErrorBox A$ + " ist fehlerhaft" |
QuestionBoxQuestionBox gibt eine Frage in einer Dialogbox aus, die der User mit JA oder NEIN beantworten kann.
Beispiele: |
DIM x
x = QuestionBox("Sind Sie sicher?")
IF x = NO THEN Print "Dann eben nicht"
|
IF QuestionBox("Wollen Sie das Programm beenden?") = YES \
THEN EXIT
|
^ |