![]() |
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 |
Re: Timer gestartet....KeyDown abfragen
Hiho Haegar,
Zitat:
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: |
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 |
also ich hab KeyPreview (meintest du das, hab KeyPress nicht gefunden) auf true gesetzt, und in Ereignissbehandlungsroutine folgendes zu stehen
Delphi-Quellcode:
alles wunderbar, doch reagiert nix, das object(auto1) sollte sich demnach nach rechts bewegen, oder nach links, je nachdem!
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; hier die timer-proz + anzeigen-proz.
Delphi-Quellcode:
is irgendwas nicht korrekt??
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; kann aber nicht sein, das der timer die ganze sache irgendwie "unterbricht" (solange er lauft) oder? |
KeyDown ist so wie es heißt. Das wird nur bei Runterbewegen der Taste ausgelöst.
|
1. warum zeichnest du das Auto immer doppelt?
2. sicher, dass sie "bremsen" und "beschleunigen" - procedures klappen? |
Zitat:
Versuch mal folgendes:
Delphi-Quellcode:
Und schau ob wirklich die Tasten erkannt werden und ob es auch die richtigen sind.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin ShowMessage(Key); end; Grüsse, Daniel :hi: |
ä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:
hmm...ich weiß ja net, hoffentlich fällt euch was auf/ein!?
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; gruß haegar |
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 :(
|
so wie ich das sehe wird zwar die Geschwindigkeit immer geändert (v) aber die Position (x) nicht.
|
Zitat:
auto.x:=auto.x+Trunc(auto.v); gemacht oder nicht? |
stimmt. Aber dann müsste von dem gepostet Code her alles in Ordnung sein
...höchstens du hat noch mehr Code :mrgreen: |
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? |
ja: auto.zeichnen ist noch wichtig!
|
Zitat:
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! |
Zitat:
Delphi-Quellcode:
Grüsse, Daniel :hi:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin ShowMessage(IntToStr(Key)); end; |
kann es sein, dass keypress nur auf die normalen Tasten reagiert :oops:
nimm mal keydown, und sag, ob es dann geht |
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 |
Also mit KeyDown dürfte es bei allen Tasten gehen, bei KeyPress (und aktiviertem Timer) zumindest mit den Buchstaben
|
Zitat:
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