Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Tastaturabfrage (https://www.delphipraxis.net/93490-tastaturabfrage.html)

PetBurki 6. Jun 2007 18:54


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?

dajuhsa 6. Jun 2007 18:56

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..

SirThornberry 6. Jun 2007 18:56

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.

dajuhsa 6. Jun 2007 19:00

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..

PetBurki 6. Jun 2007 19:02

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.

SirThornberry 6. Jun 2007 19:05

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.

PetBurki 6. Jun 2007 19:11

Re: Tastaturabfrage
 
ich hätte aber eigentlich gerne, dass ich bestimmte Tasten mit bestimmten Ereignissen belegen kann

DeddyH 6. Jun 2007 19:20

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;

SirThornberry 6. Jun 2007 19:23

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:
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;
@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.

DeddyH 6. Jun 2007 19:30

Re: Tastaturabfrage
 
Das weiß ich auch. Kann doch gewollt sein :mrgreen:

DP-Maintenance 6. Jun 2007 20:50

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ab zu Delphi...

DP-Maintenance 6. Jun 2007 21:00

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.

PetBurki 9. Jun 2007 11:25

Re: Tastaturabfrage
 
Bei mir kennt er dieses FormKeyDown garnicht! Gibts vielleicht noch ne andere möglichkeit?

inherited 9. Jun 2007 11:27

Re: Tastaturabfrage
 
Form anklicken, im ObjectInspector auf "Ereignisse", doppelt in das Feld hinter OnKeyDown

PetBurki 9. Jun 2007 11:28

Re: Tastaturabfrage
 
danke

PetBurki 9. Jun 2007 11:35

Re: Tastaturabfrage
 
Delphi-Quellcode:
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;
[Warning] Unit1.pas(33): Comparing signed and unsigned types - widened both operands

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]

inherited 9. Jun 2007 11:54

Re: Tastaturabfrage
 
Das ist kein Fehler sondern eine Warnung, der Fehler steht ne Zeile tiefer
*kristallkugelmodus* es muss else if heissen

PetBurki 9. Jun 2007 11:56

Re: Tastaturabfrage
 
immernoch der Fehler:
[Warning] Unit1.pas(33): Comparing signed and unsigned types - widened both operands

inherited 9. Jun 2007 11:58

Re: Tastaturabfrage
 
Da steht doch vor, das ist eine Warnung :roll:
Warnung <> Fehler

Matze 9. Jun 2007 12:21

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;

DeddyH 9. Jun 2007 13:07

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 00:13 Uhr.

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