Entwickler-Ecke

Multimedia / Grafik - Tastensteuerung Delphi X


Black Force - Sa 03.05.08 18:29
Titel: Tastensteuerung Delphi X
Hi,

Ich benutze für die Tastensteureung das hier in einem Timer.


Delphi-Quelltext
1:
2:
3:
4:
if isleft in Form1.DXInput1.States then
begin
......
end;

aber irgendwie passiert überhaupt nichts, wenn ich die taste drücke.


Yogu - Sa 03.05.08 21:52

Hallo user profile iconBlack Force,

vielleicht solltest du ein wenig debuggen. Schreibe zum Beispiel in das Timer-Ereignis:


Delphi-Quelltext
1:
ShowMessage('Der Timer funktioniert.');                    

Wenn du dann die Meldung bekommst, tut auf jeden Fall schon mal der Timer. Wenn das tut, solltest du die Taste debuggen:


Delphi-Quelltext
1:
2:
3:
4:
if isleft in Form1.DXInput1.States then
begin
  ShowMessage('Die Taste ''Links'' wurde gedrückt.');
end;

Wenn diese Meldung auch kommt, liegt es gar nicht an der Tastatursteuerung sondern an etwas anderem ;)

Viele Grüße,
Yogu


Black Force - So 04.05.08 21:20

Danke,

ich probier das erstmal.


Black Force - Di 06.05.08 13:24

Irgendwie funktioniert das nicht.
Könnt ihr mir vielleicht ein Beispiel
für Tastensteuerung geben. Im Standart-Delphi
kann ich's. Aber mit DelphiX geht das irgendwie nicht.


Yogu - Di 06.05.08 14:36

user profile iconBlack Force hat folgendes geschrieben:
Irgendwie funktioniert das nicht.

Was heißt, es funktioniert nicht? Hast du mal versucht, so wie ich vorgeschlagen habe, zu debuggen? Wenn ja, könntest du vielleicht die Ergebnisse mal posten? Wenn nein, machs doch mal.


Black Force - Di 06.05.08 15:46

Klar hhab ich das gemacht.
Der Timer funktioniert, die Tastensteuerung nicht.


Yogu - Di 06.05.08 15:55

Wenn du nicht unbedingt DirectX für die Tastaturabfrage verwenden willst, tut es auch ein GetAsyncKeystate:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
if GetAsyncKeystate(VK_LEFT) < 0 then
begin
  { linke Taste gedrückt }
end
else
begin
  { linke Taste nicht gedrückt }
end;

if GetAsyncKeystate(VK_RIGHT) < 0 then;
if GetAsyncKeystate(VK_UP) < 0 then;
if GetAsyncKeystate(VK_DONW) < 0 then;
if GetAsyncKeystate(VK_ESCAPE) < 0 then;
if GetAsyncKeystate(VK_CONTROL) < 0 then;

{...}


Black Force - Di 06.05.08 16:18

Vielen Dank.
Das funktioniert gut.
ICh kenne das noch so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  case key of
  VK_Space: Form1.Caption := '.........';
  end;

end;


Yogu - Di 06.05.08 16:25

Das wird aber nur aufgerufen, wenn du die Taste gerade runtergedrückt hast. Also nur einmal. Beispielen ist das aber normalerweise bei jedem Rendern erwünscht.