QuickBasic Tutorials Tastaturabfragen können auf die unterschiedlichste Art und Weise erfolgen, es kommt halt ganz darauf an was man machen möchte - oder muß. Für die meisten Fälle reicht die INKEY$ Funktion völlig aus und unter Umständen ist selbst das INPUT noch recht nützlich. Es gibt eigentlich nur zwei Spezialfälle die immer wieder auftreten und einem Kopfzerbrechen bereiten. Beim ersten Problem handelt es sich um eine von vielen schmerzlich vermisste Eingaberoutine die eine Eingabezeile von der Tastatur einliest. Naja, der INPUT Befehl macht das auch - aber mehr als dürftig. Die Eingabe sollte wenn möglich Begrenzt werden können und alle Tasten wie z.B. für das Markieren nötig unterstützen. Eine solche Routine gibt es tatsächlich. Sie heißt EditLine und wurde von Pawel Kazakow entwickelt. Es ist die wohl komplexeste Eingaberoutine die für QB existiert. Den Download findest Du aus seiner Homepage. Das zweite Problem tritt meist dann auf, wenn man z.B. ein Spiel programmiert. Spätestens dann nämlich kommt man in die Verlegenheit mehr als nur eine Taste gleichzeitig abzufragen und da stösst QB an seine Grenzen. Um dieses Problem zu umgehen habe ich lange Zeit im Internet nach einer vernünftigen und leicht zu nutzenden Lösung gesucht und sie schließlich auch gefunden - der Z-Keyboard Handler. Dabei handelt es sich um eine Assembler Routine welche sich bildlich gesprochen zwischen Tastatur und Betriebssystem einklinkt und Tastenbetätigungen "abfängt", bearbeitet und zum QB Programm weitergibt. Ich habe die Original-Anleitung einmal ins deutsche übersetzt. Sie ist ebenfalls im Download enthalten. Download DER Z-KEYBOARD HANDLER Wie funktioniert's Jedesmal, wenn Du eine Taste drückst, wird ein DOS Interrupt aufgerufen - der Interrupt 9. Der Z-Keyboard-Handler ändert die Interrupt-Vektor-Tabelle zu der Adresse wo sich die Routine des neuen Keyboard-Handlers befindet. Das bedeutet, daß nach der Installation des neuen Handlers bei jedem Tastendruck die neue von uns geschriebene Assembler-Routine aufgerufen wird und nicht der Interrupt 9. "auslesen" einer Taste Immer, wenn eine Taste gedrückt wird, wird der Wert 1 in einem Array, mit dem Scancode der Taste als Offset, gespeichert. Beispiel: Der Scancode für die Taste ESC ist 1. Wenn wir nun den Status der ESC-Taste prüfen wollen tun wir das mit folgender Zeile: IF ZKey%(1) THEN PRINT "ESC ist gedrückt!" ' ^der Scancode für ESC ist 1 (siehe weiter unten) Bei allen anderen Tasten wird genauso verfahren. Die Scancodes der einzelnen Tasten findest Du weiter unten. Sollte das alles ein wenig zu verwirrend sein, dann schau Dir einfach unser Demo-Programm Z-KB-DEMO.BAS an. Wozu das ganze!?! Nun, wenn Du noch nie ein Spiel programmiert hast, dann wirst Du dich sicher fragen, wozu zum Geier einen neuen Keyboard-Handler installieren? Der normale Zugriff auf Tasten erfolgt mit dem Befehl INKEY$. Dieser Befehl kann allerdings immer nur eine Taste abfragen, was es unmöglich macht z.B. einen Sprite zu kontrollieren. Abgesehen davon kommt es bei "wilden" Eingaben zu lästigen "Piepstönen", welche das Programm zum Anhalten bringen. All diese Probleme löst der Z-Keyboard-Handler. Die Funktionen SUB LoadAsm () Diese SUB lädt den Assembler-Code für den Handler in ein STRING-Array. WICHTIG: Diese Funktion muss vor allen anderen aufgerufen werden!!!!! SUB Zkbon () Aktiviert den neuen Keyboard-Handler. Gleichzeitig deaktiviert sie die QB-Abbruchfunktion CTRL-BREAK - also besser vorher mal abspeichern ;-) SUB Zkboff () Deaktiviert den Keyboard-Handler wieder und aktiviert den alten. WICHTIG: Diese Funktion muss aufgerufen werden bevor Dein Programm endet. Die Scancodes 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 = DEL 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 = Strg 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 = Linke Shift 44 = Z 45 = X 46 = C 47 = V 48 = B 49 = N 50 = M 51 = , oder < 52 = . oder > 53 = / oder ? 54 = Rechte Shift 55 = * oder Druck 56 = ALT 57 = Leertaste 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 Pos1 72 = 8 oder up 73 = 9 oder Bild hoch 74 = - 75 = 4 oder links 76 = 5 77 = 6 oder rechts 78 = + 79 = 1 oder Ende 80 = 2 oder runter 81 = 3 oder Bild runter 82 = 0 oder Einfg 83 = . oder Entf 87 = F11 88 = F12 Wow, eine ganze Menge Tasten was! Nun wir hoffen, daß Du, wenn Du das Tool einsetzt, an uns denkst und uns in Deinen Spielen erwähnst. Greg McAusland und Christopher Neill, Exposed Dreams '99 ins Deutsche von East-Power-Soft. |
|||