Thema: Delphi Problem bei VK_LEFT,...

Einzelnen Beitrag anzeigen

MiKeNNtKoiNer

Registriert seit: 27. Jan 2009
18 Beiträge
 
#1

Problem bei VK_LEFT,...

  Alt 11. Feb 2009, 17:54
Hallo Leute

Danke erstmal, dass ihr euch überhaupt mit meinem Problem beschäftigt.

Ich habe ein Spiel programmiert in dem ein Panel ein anderes Panel jagt. Das Panel, das gejagt wird, wird durch Zufallsvariabeln gelenkt. Das Panel, das vom Spieler gelenkt wird, wird bisher durch Buttons gelenkt oder mit w;a;s;d gelenkt. Nun wollte ich auch die Pfeiltasten einbeziehen. Hierfür mein Quelltext:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
If (key = VK_UP)
Then
  Begin
    Timer1.Enabled:=true;
    Timer19.Enabled:=true;
      If Radiobutton1.Checked=true
      Then
        Begin
          Timer2.Enabled:=true;
          Timer3.Enabled:=false;
          Timer4.Enabled:=false;
          Timer5.Enabled:=false;
        End;
      If Radiobutton2.Checked=true
      Then
        Begin
          Timer7.Enabled:=true;
          Timer8.Enabled:=false;
          Timer9.Enabled:=false;
          Timer10.Enabled:=false;
        End;
      If Radiobutton3.Checked=true
      Then
        Begin
          Timer11.Enabled:=true;
          Timer12.Enabled:=false;
          Timer13.Enabled:=false;
          Timer14.Enabled:=false;
        End;
      If Radiobutton4.Checked=true
      Then
        Begin
          Timer15.Enabled:=true;
          Timer16.Enabled:=false;
          Timer17.Enabled:=false;
          Timer18.Enabled:=false;
        End;
  End;
If (key = VK_DOWN)
Then
  Begin
    Timer1.Enabled:=true;
    Timer19.Enabled:=true;
      If Radiobutton1.Checked=true
      Then
        Begin
          Timer3.Enabled:=true;
          Timer2.Enabled:=false;
          Timer4.Enabled:=false;
          Timer5.Enabled:=false;
        End;
      If Radiobutton2.Checked=true
      Then
        Begin
          Timer8.Enabled:=true;
          Timer7.Enabled:=false;
          Timer9.Enabled:=false;
          Timer10.Enabled:=false;
        End;
      If Radiobutton3.Checked=true
      Then
        Begin
          Timer12.Enabled:=true;
          Timer11.Enabled:=false;
          Timer13.Enabled:=false;
          Timer14.Enabled:=false;
        End;
      If Radiobutton4.Checked=true
      Then
        Begin
          Timer16.Enabled:=true;
          Timer15.Enabled:=false;
          Timer17.Enabled:=false;
          Timer18.Enabled:=false;
        End;
  End;
If (key = VK_LEFT)
Then
  Begin
    Timer1.Enabled:=true;
    Timer19.Enabled:=true;
      If Radiobutton1.Checked=true
      Then
        Begin
          Timer4.Enabled:=true;
          Timer2.Enabled:=false;
          Timer3.Enabled:=false;
          Timer5.Enabled:=false;
        End;
      If Radiobutton2.Checked=true
      Then
        Begin
          Timer9.Enabled:=true;
          Timer7.Enabled:=false;
          Timer8.Enabled:=false;
          Timer10.Enabled:=false;
        End;
      If Radiobutton3.Checked=true
      Then
        Begin
          Timer13.Enabled:=true;
          Timer11.Enabled:=false;
          Timer12.Enabled:=false;
          Timer14.Enabled:=false;
        End;
      If Radiobutton4.Checked=true
      Then
        Begin
          Timer17.Enabled:=true;
          Timer16.Enabled:=false;
          Timer15.Enabled:=false;
          Timer18.Enabled:=false;
      End;
  End;
If (key = VK_RIGHT)
Then
  Begin
    Timer1.Enabled:=true;
    Timer19.Enabled:=true;
      If Radiobutton1.Checked=true
      Then
        Begin
          Timer5.Enabled:=true;
          Timer2.Enabled:=false;
          Timer3.Enabled:=false;
          Timer4.Enabled:=false;
        End;
      If Radiobutton2.Checked=true
      Then
        Begin
          Timer10.Enabled:=true;
          Timer7.Enabled:=false;
          Timer8.Enabled:=false;
          Timer9.Enabled:=false;
        End;
      If Radiobutton3.Checked=true
      Then
        Begin
          Timer14.Enabled:=true;
          Timer11.Enabled:=false;
          Timer12.Enabled:=false;
          Timer13.Enabled:=false;
        End;
      If Radiobutton4.Checked=true
      Then
        Begin
          Timer18.Enabled:=true;
          Timer16.Enabled:=false;
          Timer15.Enabled:=false;
          Timer17.Enabled:=false;
      End;
  End;
If (key = VK_SPACE)
Then
  Begin
      Timer1.Enabled:=false;
      Timer2.Enabled:=false;
      Timer3.Enabled:=false;
      Timer4.Enabled:=false;
      Timer5.Enabled:=false;
      Timer7.Enabled:=false;
      Timer8.Enabled:=false;
      Timer9.Enabled:=false;
      Timer10.Enabled:=false;
      Timer11.Enabled:=false;
      Timer12.Enabled:=false;
      Timer13.Enabled:=false;
      Timer14.Enabled:=false;
      Timer18.Enabled:=false;
      Timer16.Enabled:=false;
      Timer17.Enabled:=false;
      Timer15.Enabled:=false;
      Timer19.Enabled:=false;
  End;
end;
Bitte keine Kommentare zu den vielen Timern ich hätte es zwar auch mit If und Then und Else machen können, aber so schien es mir zunächst übersichtlicher. Was sich jedoch wie man sieht als falsch herausstellte.

Nun zu meinem eigentlichen Problem:
Wenn ich mein Spiel starte und im Hauptmenü einen Schwierigkeitsgrad auswähle, dann den Start-Button drücke reagiert das Panel nicht sofort auf die Pfeiltasten, sondern erst wenn ich durch das beständige einschlagen auf die Pfeiltasten die Auswahl; die nach dem Startklick natürlich auf dem Start-Button ist; auf das Edit-Feld meiner Stoppuhr ändere. Selbst wenn ich Strg oder Shift gedückt halte muss Die auswahl zunächst auf das Edit-Feld springen.
Weiß irgendjemand wie ich dieses Problem beheben kann?

Mfg
Hagen

P.S.: Kann man verhindern, dass etwas in ein Edit-Feld eingegeben kann oder muss ich dafür eine Listbox beispielsweis benutzen?