QBASIC-Club
Home - QBasic - Tutorails - DirectQB


Weitere Teile:
DirectQB Teil 1 - Installation
DirectQB Teil 2 - Primitive Drawroutinen
DirectQB Teil 3 - Mouse und Sound
DirectQB Teil 4 - Sprites
DirectQB Teil 5 - Keyboard

DirectQB Tutorial Teil 5 – Keyboard

Habt ihr euch nicht auch manchmal eine richtig gute Inkeyroutine gewünscht. Ich meine, Inkey$ ist zwar zum eingeben einzelner Buchstaben nicht schlecht aber für ein Spiel, bei welchem man die Cusortasten benötigt, ist es der absolute Schwachsinn. Man kann immer nur eine Taste drücken, es kommt immer zu einer Verzögerung und wenn man zu lange drückt, schreit der Computer herum, dass man doch gefälligst die Tasten los lassen soll (das BEEP).
Wie wäre es den mit einer Routine, bei der man immer genau weiß, welche Taste gerade gedrückt wird und welche gerade nicht gedrückt wird?
Nun, DirectQB bietet diese Routine. Leider hat diese einige Nachteile aber dazu komme ich später.
Das wichtigste ist der Befehl
DQBinstallKeyboard
Dabei wird die Routine in den Speicher geladen und ist gleich aktiv.
Mit der Funktion
DQBkey(X)
Kann man dann in Erfahrung bringen, welche Taste gerade gedrückt wird.
Das X ist die Zahl der Taste, der Status man ermitteln möchte.
Es ist zum Beispiel die 1 für ESC.
DQBkey liefert dann einen Wert ungleich Null zurück wenn die Taste gedrückt wird. Wenn die taste nicht gedrückt wird, wird der Wert gleich Null zurück geliefert.
Um die Keyboardroutine wieder zu deaktivieren muß man einfach nur
DQBremoveKeyboard
Ausführen.
Das war‘s eigentlich schon. Aber kommen wir nun zu den Problemen.
So lange die Routine aktiv ist, das heißt, nachdem DQBinstallKeyboard ausgeführt wurde, kann QBasic keine Tasten basierenden  Funktionen mehr starten. Es funktioniert weder INKEY$ noch SLEEP 0 oder Input.
Das QBasic-Program kann  auch nicht mehr durch STRG + Pause beendet werden.
Man hat dann auch keine Kontrolle mehr über QBasic selbst.
Es ist dann so, als ob das Keyboard nicht mehr angeschlossen ist.
Es ist also unbedingt zu beachten, dass immer DQBremoveKeyboard vor dem Beenden des Programms ausgeführt wird. Wenn man dieses vergißt, kann man den PC nur noch neu starten.

Hier jetzt die List für die Tasten

    1  =   ESC
    2  =   1
    3  =   2
    4  =   3
    5  =   4
    6  =   5
    7  =   6
    8  =   7
    9  =  9
    10 =  0
    11 =  - oder _
    12 =   = oder +
    13 =   Backspace
    14 =   Tab
    15 =   Q
    17 =   W
    18 =   E
    19 =   R
    20 =  T
    21 =   Y
    22 =   U
    23 =   I
    24 =   O
    25 =   P
    26 =   [ oder {
    27 =   ] oder }
    28 =   Enter
    29 =   Control
    30 =     A
    31 =   S
    32 =   D
    33 =   F
    34 =   G
    35 =   H
    36 =   J
    37 =   K
    38 =   L
    39 =   ; oder :
    40 =   ' oder "
    41 =   \ oder ~
    42 =   linkes Shift
    44 =   Z
    45 =   X
    46 =   C
    47 =   V
    48 =   B
    49 =   N
    50 =   M
    51 =   , oder <
    52 =   . oder >
    53 =   / oder ?
    54 =   rechtes Shift
    55 =   * oder Druck
    56 =   ALT
    57 =   Leer
    58 =   Caps Lock
    59 =   F1
    60 =   F2
    61 =   F3
    62 =   F4
    63 =   F5
    64 =   F6
    65 =   F7
    66 =   F8
    67 =   F9
    68 =   F10
    69 =   Num lock
    70 =   Rollen
    71 =   7 oder Home
    72 =   8 oder Hoch
    73 =   9 oder Page up
    74 =    -
    75 =   4 oder Links
    76 =   5
    77 =   6 oder Rechts
    78 =   +
    79 =   1 oder END
    80 =   2 oder Runter
    81 =   3 oder Seite runter
    82 =   0 oder Einfg
    83 =   . oder Entf
    87 =   F11
    88 =   F12

Diese List ist für ein Amerikanisches Keyboard.
 

Hier noch ein Beispiel:

' All Integer für die Geschwindigkeit
DEFINT A-Z

'$INCLUDE:'DIRECTQB.BI'

' Es wird DQB ohne Extras geladen
IF DQBinit(0, 0, 0) THEN DQBclose: PRINT DQBerror$: END

' Keyboardroutine wird installiert
DQBinstallKeyboard

CLS
PRINT "Keyboard DEMO – drücke eine Taste für seinen Scanncode. Es sind auch mehrere Tasten gleichzeitig erlaubt ; Drücke ESC zum Beenden."

DO
    LOCATE 3, 1

    ' Suche nach allen Tasten

    ' Wenn eine Taste gedrückt wird dann zeige sie an
    IF DQBkey(i) THEN PRINT "[" + LTRIM$(STR$(i)) + "] ";
NEXT i

' Löscht ein Stück das Bildschirms
PRINT SPACE$(40)

' Schleife verlasen wenn ESC gedrückt wird
LOOP UNTIL DQBkey(KEYESC)

' Beende KeyboardRoutine
DQBremoveKeyboard

' Beende Programm
DQBclose
 

Ich denke, dass das das Wichtigste war.
 
 

Webmaster: Soeren Dressler

 
Click here now to get your free web page!!