![]() |
Auf Pfeiltasten reagieren
Hallo Zusammen
Ich bin ein ziemlicher Anfänger was Delphi betrifft, habe bis jetzt einige Tutorials durchgearbeitet und lerne mit einem Buch. Bis jetzt habe ich hauptsächlich mit OnClick Ereignisse programmiert, sprich immer einen Button der etwas auslöst, jetzt würde ich gerne durch einfaches Drücken einer Taste, also z.B. einer Pfeiltaste ein Ereignis auslösen, nahelegend wäre hier die Verschiebung z.B. eines TImages. versucht habe ich das ganze so:
Delphi-Quellcode:
Aber auf Knopfdruck geschieht nichts. Liegt hier im Code schon ein Fehler vor, oder muss der Fehler wo anders sein?
procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if key = vk_left then image1.Left := image1.Left - 1; if key = vk_right then image1.Left := image1.Left +1; if key = vk_up then image1.Top := image1.Top - 1; if key = vk_Down then image1.Top := Image1.Top + 1; end; Und noch eine Frage: Was gibt es sonst für Möglichkeiten auf Tastatur eingaben zu reagieren? vielen Dank und freundliche Grüsse |
AW: Auf Pfeiltasten reagieren
Setz doch mal zum Testen
![]()
Delphi-Quellcode:
procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case Chr(Key) of 'W': Image1.Top := Image1.Top - 1; 'S': Image1.Top := Image1.Top + 1; 'A': Image1.Left := Image1.Left - 1; 'D': Image1.Left := Image1.Left + 1; end; end; |
AW: Auf Pfeiltasten reagieren
Das Event ist schon richtig. Das Problem ist aber, dass das Image pro Tastendruck nur einmalig um 1px verschoben wird und nicht kontinuierlich solange du die Taste gedrückt hälst. Du müsstest dir also eine (oder mehrere) Variablen anlegen, die sich merken, welche Pfeiltasten momentan gedrückt sind. Dazu kannst du die OnKeyDown und OnKeyUp Events verwenden. Zusätzlich brauchst du dann einen Timer, in dem das eigentliche Verschieben des Images stattfindet.
|
AW: Auf Pfeiltasten reagieren
Ich dachte, KeyPreview nutzt bei Pfeiltasten eh nichts?
Zitat:
|
AW: Auf Pfeiltasten reagieren
Zitat:
Wenn noch andere Komponenten auf der Form sind, welche den Fokus bekommen können und vorallem Welche ebenfalls diese Tasten auswerten, dann kommt der Aufruf natürlich nie in deiner Methode an. Es sei denn man setzt z.B. KeyPreview der Form auf True, damit das Ereignis zuerst dort ankommt. PS: Es kann auch gut sein, daß man Key am Ende auf 0 bzw. #0 setzt. Natürlich nur, wenn man eine Taste verarbeitet hat. Voallem dann, wenn die andere Komponente danach selber nochmal darauf reagiert, was man damit unterbinden würde, also die doppelte Auswertung. |
AW: Auf Pfeiltasten reagieren
Zitat:
Daran habe ich auch gedacht, aber ich habe als Versuch mal in eine Richtung 1000 eingegeben und da hat sich auch nichts getan? |
AW: Auf Pfeiltasten reagieren
Ich weiß nicht mehr genau welches Event, aber OnKeyDown oder OnKeyPress wird, nach paar Millisekunden gedrückt halten, "wiederholt" ausgeführt.
> Tastenwiederholrate usw. Man kann auch im KeyDown eine Variable setzen, und/oder einen Timer starten in dem dann so lange die aktion ausgeführt wird, bis es vom KeyUp gestoppt wird. Oder man fragt z.B. in einem asynchron den Tastenstatus ab. (GetKeyState bzw. GetAsyncKeyState oder so) Und dann gibt es noch so Dinge wie ActiveInput und Dergleichen. |
AW: Auf Pfeiltasten reagieren
![]() ![]() ![]() ![]() ![]() ![]() Die Tastatur-Wiederholung wird durch die Nachricht ![]() Mit ![]()
Delphi-Quellcode:
werden alle Tastaturereignisse (
True
![]() ![]() ![]() Ablauffolge beim Drücken von Tasten:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 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