Entwickler-Ecke
Sonstiges (Delphi) - Spezialzeichen
meisterkritiker - Mo 09.12.02 16:14
Titel: Spezialzeichen
Ich wollte ein kleines Spiel machen und dabei bin ich auf folgendes Problem gestoßen:
Der Benutzer muss Eingaben machen, um den Charakter zu steuern.
Die sollte man möglichst über die Tastatur machen. Da hab ich folgende Prozedur gefunden.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Timer1Timer(Sender: TObject); var keyloop, KeyResult : Integer; begin keyloop := 0; repeat KeyResult := GetAsyncKeyState(keyloop); if KeyResult = -32767 then begin if (KeyLoop >= 65) and (keyloop <= 90) then Memo1.Text := Memo1.Text + Chr(keyloop); if (keyloop >= 32) and (keyloop <= 63) then Memo1.Text := Memo1.Text + Chr(keyloop); if keyloop = 8 then Memo1.Text := copy(Memo1.Text,1,Length(memo1.Text) - 1); //numpad keycodes if (keyloop >= 96) and (keyloop <= 110) then Memo1.Text := Memo1.Text + Chr(keyloop); end; inc(keyloop); until keyloop = 255; end; |
(Memo ist nur für Testzwecke, um zu sehen, welche Tasten er abfängt.)
Allerdings kann ich damit nur Zahlen und Buchstaben abfangen. Gibt es Möglichkeiten, um auch die Sonderzeichen, wie z.B. Enter, Cursor etc. auszugeben?
Ex0rzist - Mo 09.12.02 19:53
Hast du es schon mit den Virtual-Keys versucht?
Return = VK_RETURN
Cursor-Up = VK_UP
usw.
Delete - Mo 09.12.02 20:31
Ich würde das nicht in einem Timer-Event machen, sondern das KeyPress oder KeyDown-Ereignis nutzen.
Dirk - Mo 09.12.02 21:59
In vielen Fällen ist es so vielleicht besser:
Unter private:
Quelltext
1:
| procedure MyIdleHandler(Sender: TObject; var Done: Boolean); |
Form1.OnCreate:
Quelltext
1:
| Application.OnIdle:= MyIdleHandler; |
Und letzendlich die eigentliche Prozedur:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.MyIdleHandler(Sender: TObject; var Done: Boolean); var KeyboardState: TKeyBoardState;
function Key(aCode: byte): boolean; begin result := Keyboardstate[aCode] and $80 <> 0; end;
begin GetKeyboardState(KeyboardState); if Spieler.Erholung >= 10 then begin // damit er nicht 1000 Zeichen pro Sekunde empfängt Spieler.Erholung := 0; if Key(VK_RIGHT) then Memo1.Lines.Add('Rechts'); if Key(VK_LEFT) then Memo1.Lines.Add('Links'); end; end; |
EDIT: Die Steuerzeichen spinnen, weil ich meinem Code auch [code] vorkommt....
(09.12. 23:23 Tino) Code-Tags funktionieren nun!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!