Entwickler-Ecke

Sonstiges (Delphi) - fahrendes auto


lachgas - So 11.01.09 12:34
Titel: fahrendes auto
hallo.
für meine projektarbeit in der schule, will ich ein auto auf der form zum fahren bringen.
zuerst will ich, dass das auto mit canvas gezeichnet wird. soweit bin ich schon. nun will ich, das über einen weitern button, die bewegung aktiviert wird, dass heißt, dass nachdem der button gedrückt wurde, die zeichnung auf die steuertasten reagiert und sich bewegt. aber an diesem schritt komme ich nicht mehr weiter. könnte mir da von euch bitte einer helfen?
mfg


Tilo - So 11.01.09 12:43

Um auf Tastatureingaben regieren zu können guck Dir mal die Events Onkey[Press, Up Down] der Form an.

Mit Hilfe deines "Aktivieren Buttons" setzt Du eine boolsche Variable auf true oder false. Zum Anfang reicht eine globale Variable. Welche Taste gedrückt wird werte in der Procedure für das Tastenevent aus. Entsprechend der Taste dann das Objekt verschieben.


lachgas - So 11.01.09 12:54

okay...und wie würde das in der unit aussehen?
mit dem boolean komme ich nämlich nicht klar, bzw kann mir das nicht vorstellen.
so sieht das momentan bei mir aus!!!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure TForm1.Button3Click(Sender: TObject);

    procedure zeichnen(k,l:Integer);
      begin
        with canvas do
          begin
          pen.width:=2;
         pen.Color:=clblue;
         brush.Color:=clblue;
         ellipse((k+190)-2,(l+275)-2,(k+190)+2,(l+275)+2);
         end;
      end;

begin
case Key of
  VK_LEFT:
    begin
      k:=k+10;
      l:=l+2;
      zeichnen(k,l);
    end;
  VK_RIGHT:
    begin
      k:=k+10;
      l:=l+2;
      zeichnen(k,l);
    end;
  VK_UP:
    begin
      k:=k+10;
      zeichnen(k,l);
    end;
  end;

end;

end.

ich dachte mir halt auch, dass ich sobald ich ne variable verändert habe, über ne procedure das gleich wieder zeichnen lasse. natürlich fehlt hier noch der teil, in dem die alte zeichnung gelöscht wird.

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


mkinzler - So 11.01.09 13:10

Verwende bitte Code-Tags, dann ist der Code besser lesbar

Mache aus Zeichnen eine Methode und rufe diese dann in Paint() auf.


lachgas - So 11.01.09 13:20

was ist den methode, bzw wie stelle ich eine methode her?


mkinzler - So 11.01.09 13:22

Eine Methode ist Teil einer Klasse:


Delphi-Quelltext
1:
procedure TForm1.zeichnen(k,l:Integer);                    


Jakob_Ullmann - So 11.01.09 14:49

Ich würde dir bei sowas nicht die OnKeyDown empfehlen. Nimm lieber einen Timer, der dann abfragt:


Delphi-Quelltext
1:
2:
3:
4:
5:
if GetAsyncKeystate(VK_LEFT) < 0 then
begin
  // links gedrückt
  // ...
end;


Ansonsten kann es etwas länger dauern, bis sich das Auto bewegt.

Zu einer Methode: In Delphi wird zwischen Prozeduren und Funktionen unterschieden. Bei einer Prozedur wird nur etwas ausgeführt, bei einer Funktion wird zusätzlich noch ein Wert zurückgegeben.


lachgas - Mi 14.01.09 17:58

jakob ich danke dir...das hat wunderbar funktioniert.