Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - keydown / keyup mit spezifischen Tasten?


GR-Thunderstorm - Mi 24.01.07 11:26
Titel: keydown / keyup mit spezifischen Tasten?
Ich möchte ein kleines Spiel basteln und für die Steuerung brauche ich die FormKeyDown und /-Up Funktionen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = ord('d'then
   gehe;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = ord('d'then
   stehe;
end;


Das Problem ist, dass wenn ich die Taste 'd' Drücke, nichts passiert... :(

Wenn ich das "if key = ord('d') then" weglasse, führt er meine Prozeduren bei jeder Taste aus.
Was mache ich falsch?


Blackheart666 - Mi 24.01.07 12:10

if chr(Key)='d'


jaenicke - Mi 24.01.07 12:37

user profile iconBlackheart666 hat folgendes geschrieben:
if chr(Key)='d'
Ist doch exakt dasselbe... :lol:

Was du doch jedenfalls machen willst, ist doch wohl, dass du kontinuierlich weiterläufst solange die Taste gedrückt ist, oder? Wo machst du denn das?
Dein Code hier ist jedenfalls erstmal korrekt. Aber was passiert, wenn die Methoden ausgeführt werden denn?

OnKeyDown wird ja nur einmal beim Drücken ausgelöst, insofern müsste ja in gehe ein Timer oder irgendwas anlaufen, wenn etwas passieren soll, solange die Taste gedrückt wird.


GR-Thunderstorm - Mi 24.01.07 17:06

Ja genau, gehe ist eine Prozedur, die diverse Timer startet die für verschiedene Bewegungen zuständig sind.
Mit "stehe;" werden diese wiederrum allesamt deaktiviert.

Leider nur funktioniert das so alles eben nicht... :/

Wenn ich mit form.keypress arbeite und dann if key = 'd' then gehe; angebe, funtioniert ja alles, nur dass ich eben auf diese Weise die Prozedur stehe; nicht ausführen kann.


Edit:
Um die ganzen Timer mit den zusammenhängenden Variablen auch noch zu erklären, müsste ich den gesamten Quellcode hier posten, und der geht schon über mehrere Seiten... ;)


GR-Thunderstorm - Mi 24.01.07 17:35

Argh ich hab den Fehler gefunden.. -.-'

if key = ord('D') then ..;

Mit nem großen D klappts, mit nem kleinen nicht. -.-

Trotzdem erstmal Danke! :)