![]() |
Tastaturabfrage
Ich möcht in einer schleife durchgehend abfragen, ob bestimmte Tasten gedrückt werden. (w, a, s, d) Dann soll eine aktion passieren. Wie geht diese Tastaturabfrage?
|
Re: Tastaturabfrage
if GetAsyncKeyState(Hier Tastenname)<>0 then...
die tastennamen sind recht einfach rauszufinden: a=#65, b=#66, c=#67 usw. wenn mich nicht alles täuscht sollte das stimmen.. |
Re: Tastaturabfrage
willst du bewusst nicht die Ereignisse OnKeyDown, OnKeyUp etc. nutzen oder sind diese dir bisher nur unbekannt?
@dajuhsa: Deine Lösung ist falsch. Schau dir mal die Hilfe zu GetAsyncKeyState an. Da wirst du feststellen das du auch <> 0 zurück bekommst wenn die Taste seit dem letzten aufruf gedrückt wurde etc. |
Re: Tastaturabfrage
naja, bei mir klappt das meistens recht gut. z.B. für Bewegung auf Tastendruck.
Aber ich weiß ja nicht was PetBurki bezwecken will.. |
Re: Tastaturabfrage
ich hab davon gar keine Ahnung. Ich bin noch ein ziemlicher Anfänger, da ichs nur in der Schule lerne und auch erst seit diesem schuljahr.
Ich will einfach nur Tasten abfragen können, weil es mich interessiert, wie das geht. Dann soll halt eine Aktion, die ich mir dann ausdenke und programmiere passieren. |
Re: Tastaturabfrage
anstelle eine Schleife ist es empfehlenswerter die Ereignisse zu nutzen.
Setze dazu die Eigenschaft "KeyPreview" des Formulares auf True und Nutzde die Ereignisse OnKeyDown und OnKeyUp des Formulares. Sobald eine Taste gedrückt wird, wird das Ereignis ausgelöst. |
Re: Tastaturabfrage
ich hätte aber eigentlich gerne, dass ich bestimmte Tasten mit bestimmten Ereignissen belegen kann
|
Re: Tastaturabfrage
Und was hindert Dich daran?
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin case Key of 'a': Button1Click(Sender); 'w': Button2Click(Sender); 's': Button3Click(Sender); 'd': Button4Click(Sender); end; end; |
Re: Tastaturabfrage
kannst du doch - frag dann einfach im OnKeyDown ab welche Taste gedrückt wurde (die Taste welche gedrückt wurde wird mit übergeben).
Delphi-Quellcode:
@daddyh: KeyPress ist die falsche Methode da man dort zwischen "A" und "a" unterscheiden muss weil eben nicht die Taste übergeben wird sondern der charakter.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Key = VkKeyScan('a') then caption := 'toll es wurde a gedrückt' else Key = VkKeyScan('w') then caption := 'es wurde w gedrückt'; end; |
Re: Tastaturabfrage
Das weiß ich auch. Kann doch gewollt sein :mrgreen:
|
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ab zu Delphi... |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
|
Re: Tastaturabfrage
Bei mir kennt er dieses FormKeyDown garnicht! Gibts vielleicht noch ne andere möglichkeit?
|
Re: Tastaturabfrage
Form anklicken, im ObjectInspector auf "Ereignisse", doppelt in das Feld hinter OnKeyDown
|
Re: Tastaturabfrage
danke
|
Re: Tastaturabfrage
Delphi-Quellcode:
[Warning] Unit1.pas(33): Comparing signed and unsigned types - widened both operands
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Key = VkKeyScan('a') then caption := 'toll es wurde a gedrückt' else Key = VkKeyScan('w') then <------In dieser Zeile meldet er den Fehler: caption := 'es wurde w gedrückt'; end; [edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit] |
Re: Tastaturabfrage
Das ist kein Fehler sondern eine Warnung, der Fehler steht ne Zeile tiefer
*kristallkugelmodus* es muss else if heissen |
Re: Tastaturabfrage
immernoch der Fehler:
[Warning] Unit1.pas(33): Comparing signed and unsigned types - widened both operands |
Re: Tastaturabfrage
Da steht doch vor, das ist eine Warnung :roll:
Warnung <> Fehler |
Re: Tastaturabfrage
Dann schreibe ihm doch gleich, wie man diese Warnung auch behebt, denn Warnungen sind auch nicht so das Wahre. :roll:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key = Ord('A') then Caption := 'toll es wurde a gedrückt' else if Key = Ord('W') then Caption := 'es wurde w gedrückt'; end; |
Re: Tastaturabfrage
Nimm doch gleich case.
Delphi-Quellcode:
procedure TFrmMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case Key of Ord('W'): ShowMessage('W'); Ord('A'): ShowMessage('A'); Ord('S'): ShowMessage('S'); Ord('D'): ShowMessage('D'); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 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