Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Timer gestartet....KeyDown abfragen (https://www.delphipraxis.net/3125-timer-gestartet-keydown-abfragen.html)

Haegar 24. Feb 2003 19:03


Timer gestartet....KeyDown abfragen
 
hiho,
ich habe in meinem programm eine timer-kompo....die wird irgendwann aktiviert, und timed so vor sich hin.
nun will ich aber während dessen mit TForm1.Form1KeyDown afragen ob eine taste gedrückt wird. reicht das wenn ich die prozedur einfach nur erstelle (also ganz normal irgendwo im impementation-teil), oder muss ich die irgendwie in verbindung mit dem timer bringen??

danke schonmal
ciao haegar

Daniel B 24. Feb 2003 20:14

Re: Timer gestartet....KeyDown abfragen
 
Hiho Haegar,
Zitat:

Zitat von Haegar
nun will ich aber während dessen mit TForm1.Form1KeyDown afragen ob eine taste gedrückt wird. reicht das wenn ich die prozedur einfach nur erstelle (also ganz normal irgendwo im impementation-teil), oder muss ich die irgendwie in verbindung mit dem timer bringen??

1. Im OJ für Form1 KeyPress auf True stellen.
2. Verwende die Prozedur OnKexPress von Form1.
Sobald eine Taste gedrückt wird, tritt dies ein.
Mir ist nicht ganz Klar was Du mit dem Timer willst?!

Grüsse, Daniel :hi:

Haegar 24. Feb 2003 20:26

also der timer, läst ein object immer neu zeichnen, und die taste muss dauerhaft gedrükt werden. ich dachte das dauerhaft drücken is nur im KeyDown-ereigniss.
mal sehen obs klappt

Haegar 24. Feb 2003 20:34

also ich hab KeyPreview (meintest du das, hab KeyPress nicht gefunden) auf true gesetzt, und in Ereignissbehandlungsroutine folgendes zu stehen
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if Key=CHR(VK_UP) then
  auto1.schneller(1.5);
 if Key=CHR(VK_DOWN) then
  auto1.bremsen(2);
end;
alles wunderbar, doch reagiert nix, das object(auto1) sollte sich demnach nach rechts bewegen, oder nach links, je nachdem!

hier die timer-proz + anzeigen-proz.
Delphi-Quellcode:
procedure anzeigen(auto:TAuto);
begin
 auto.zeichnen(Form1.Image1.Canvas);
 auto.x:=auto.x+Trunc(auto.v);
 auto.zeichnen(Form1.Image1.Canvas);
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
 anzeigen(auto1);
end;
is irgendwas nicht korrekt??
kann aber nicht sein, das der timer die ganze sache irgendwie "unterbricht" (solange er lauft) oder?

nailor 24. Feb 2003 20:35

KeyDown ist so wie es heißt. Das wird nur bei Runterbewegen der Taste ausgelöst.

nailor 24. Feb 2003 20:38

1. warum zeichnest du das Auto immer doppelt?

2. sicher, dass sie "bremsen" und "beschleunigen" - procedures klappen?

Daniel B 24. Feb 2003 20:39

Zitat:

Zitat von Haegar
also ich hab KeyPreview (meintest du das, hab KeyPress nicht gefunden) auf true gesetzt, und in Ereignissbehandlungsroutine folgendes zu stehen

So war das gemeint.
Versuch mal folgendes:
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage(Key);
end;
Und schau ob wirklich die Tasten erkannt werden und ob es auch die richtigen sind.

Grüsse, Daniel :hi:

Haegar 24. Feb 2003 20:42

äh naja hab ich mir vielleicht falsch abgeguckt, bei beispielen im buch war auch immer doppelt (übermalen...neue pos...neu malen -> dachte das soll so sein) :roll:
´bin ja erst reingestolpert in die 2d-grafiken.
die prozeduren sollten eigentlich stimmen.
Delphi-Quellcode:
procedure TAuto.schneller(dv:real);
begin
 v:=v+dv;
 if v>=30 then
  v:=30;
end;

procedure TAuto.bremsen(dv:real);
begin
 v:=v-dv;
 if v<=-10 then
  v:=-10;
end;
hmm...ich weiß ja net, hoffentlich fällt euch was auf/ein!?

gruß haegar

Haegar 24. Feb 2003 20:46

da wird nix angezeigt!? soll das etwa doch bedeuten das der timer primär läuft, und die anderen sachene erst weiter gehen, wenn timer ausgeschaltet is?.......aha auch wenn ich den timer noch nicht starte, zeigt er nichts über showmessage(Key); an :(

nailor 24. Feb 2003 20:46

so wie ich das sehe wird zwar die Geschwindigkeit immer geändert (v) aber die Position (x) nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz