Delphi-PRAXiS

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.

Haegar 24. Feb 2003 20:50

Zitat:

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

is doch in der anzeigen-proz. mit
auto.x:=auto.x+Trunc(auto.v); gemacht oder nicht?

nailor 24. Feb 2003 20:55

stimmt. Aber dann müsste von dem gepostet Code her alles in Ordnung sein

...höchstens du hat noch mehr Code :mrgreen:

Haegar 24. Feb 2003 20:57

ja sicher, aber das is glaube ich der wichtige teil, korrigiere mich wenn nötig ;)

das komische ist ja, das er auch ohne aktiven timer kein ergebniss bei showmessage(key) macht!? wie versteh ich das denn?

nailor 24. Feb 2003 20:58

ja: auto.zeichnen ist noch wichtig!

Haegar 24. Feb 2003 21:01

Zitat:

Zitat von Nailor
ja: auto.zeichnen ist noch wichtig!

also bevor du wegen der aufwendigen auto.zeichnen-proz. vom stuhl fällst :D will ich mal noch was sagen.
hab grad mal neue application gemacht, ohne alles! einfach nur diese showmessage-sache im OnKeyPress.......siehe da, fast alle tasten bewirken eine ausgabe, nur die cursor-tasten NICHT, liegt das problem also ganz woanders!!!?

ach ja nochwas :(...hab grad diese cursortasten duch 'd' und 's' ersetzt--> showmessage reagiert! aber auto nicht :cry:
verzweifeln tu!

Daniel B 24. Feb 2003 21:06

Zitat:

Zitat von Haegar
siehe da, fast alle tasten bewirken eine ausgabe, nur die cursor-tasten NICHT, liegt das problem also ganz woanders!!!?

Das geht nur hiermit:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ShowMessage(IntToStr(Key));
end;
Grüsse, Daniel :hi:

nailor 24. Feb 2003 21:09

kann es sein, dass keypress nur auf die normalen Tasten reagiert :oops:

nimm mal keydown, und sag, ob es dann geht

Haegar 24. Feb 2003 21:10

also für die cursortaste doch wieder KeyDown??? :freak:
lol
aber ich weiss, warum es bei d und s nicht funktioniert hat.....ich hab den timer nicht aktiviert :firejump: (genial was?)...*mir links und rechts eine kleben tu*

naja nur noch ein anderes problem, die bemalte fläche is ja beim bewegen immer noch so bemalt(hab dann sone spur vom auto). eigentlich sollte allte pos gelöscht, neue zeichnen, aber mach ich neuen thread wenn nötig

nailor 24. Feb 2003 21:11

Also mit KeyDown dürfte es bei allen Tasten gehen, bei KeyPress (und aktiviertem Timer) zumindest mit den Buchstaben

Haegar 24. Feb 2003 21:15

Zitat:

Zitat von Nailor
Also mit KeyDown dürfte es bei allen Tasten gehen, bei KeyPress (und aktiviertem Timer) zumindest mit den Buchstaben

also jetzt funktionierts mit KeyDown und den pfeiltasten (wegen der timersache :? )

gruß haegar


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.

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