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?