Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tasten abfragen (https://www.delphipraxis.net/29164-tasten-abfragen.html)

ferby 4. Sep 2004 21:26


Tasten abfragen
 
Hallo,

Ich weiß wie man Normale Tasten wie Buchstaben abfragt. Aber wie frage ich z.B: die Pfeiltasten, die Esc Taste oder die Entertaste ab?

if key=Pfeiltaste nach links then mach was.....



Wie geht das?

djmasi 4. Sep 2004 21:30

Re: Tasten abfragen
 
Hi :hi:

z.B. so (ist ein Auszug aus nem Prog von mir)
Delphi-Quellcode:
//****************************************************************************//
procedure TFMain.VSTSectionsKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //wird eine Taste gedrückt, mit der das OnChange-Event ausgelöst wird,
  //so wird über CanUpdate dieses verhindert um ein flackern zu vermeiden
  if (Key = VK_DOWN) or
     (Key = VK_NEXT) or
     (Key = VK_PRIOR) or
     (Key = VK_UP) or
     ((Key in [65..90]) and (ssShift in Shift)) then
    CanUpdate := False;
end;
//****************************************************************************//
//****************************************************************************//
[edit]
Steht in der Windows.pas
Delphi-Quellcode:
  {$EXTERNALSYM VK_ESCAPE}
  VK_ESCAPE = 27;
  {$EXTERNALSYM VK_SPACE}
  VK_SPACE = $20;
  {$EXTERNALSYM VK_PRIOR}
  VK_PRIOR = 33;
  {$EXTERNALSYM VK_NEXT}
  VK_NEXT = 34;
  {$EXTERNALSYM VK_END}
  VK_END = 35;
  {$EXTERNALSYM VK_HOME}
  VK_HOME = 36;
  {$EXTERNALSYM VK_LEFT}
  VK_LEFT = 37;
  {$EXTERNALSYM VK_UP}
  VK_UP = 38;
  {$EXTERNALSYM VK_RIGHT}
  VK_RIGHT = 39;
  {$EXTERNALSYM VK_DOWN}
  VK_DOWN = 40;
[/edit]

Duffy 4. Sep 2004 21:35

Re: Tasten abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo ferby,
und das Ganze mal in eine Demno verpackt ...

ferby 4. Sep 2004 21:41

Re: Tasten abfragen
 
Hallo,

wie muss ich das eingeben?
habe probiert:

if key=VK_DOWN then...
if key=#40 then...

aber da geht es nicht.

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin

  if status='spiel' then
  begin
  if key='4' then richtung:='links';
  if key='6' then richtung:='rechts';
  if key='8' then richtung:='rauf';
  if key='2' then richtung:='runter';
  end;

end;
Das habe ich geschrieben nur statt den Nummern will ich jetzt die Pfeiltasten

Duffy 4. Sep 2004 21:43

Re: Tasten abfragen
 
Hallo ferby,
schau Dir doch die Demo an, der Rest findet sich ;-)

bye
Claus

djmasi 4. Sep 2004 21:43

Re: Tasten abfragen
 
das geht nur im OnKeyDown-Ereignis. Falls Du es gesehen hast, da ist Key als Word definiert, im OnKeyPress als Char

Nonsense 4. Sep 2004 21:53

Re: Tasten abfragen
 
Anstatt einer if then Abfrage geht auch case of.

ferby 4. Sep 2004 22:04

Re: Tasten abfragen
 
Hallo,

Ich verstehs noch immer nicht so ganz, auch mit dem demo nicht.
Ich habe jetzt statt char word genommen.
Wenn ich jetzt das programm starte kommt die meldung: Die Methode FormKeyPress, auf die Form1.onkeypress verweißt, enthält einen inkompatible Parameterliste. Soll der Verweiß entfernt werden?

Geh ich auf ja geht gar keine Taste mehr geh ich auf nein startet das Progamm nicht....

djmasi 4. Sep 2004 22:09

Re: Tasten abfragen
 
Laut der Delphi-Hilfe:
Zitat:

Der Parameter Key in der Ereignisbehandlungsroutine für OnKeyPress hat den Typ Char. Deshalb registriert das Ereignis OnKeyPress das ASCII-Zeichen der gedrückten Taste. Entspricht die Taste keinem ASCII-Zeichenwert (beispielsweise Umschalt oder F1), wird kein OnKeyPress-Ereignis generiert. Tastenkombinationen (beispielsweise Umschalt+A) generieren nur ein OnKeyPress-Ereignis (in diesem Beispiel generiert Umschalt+A den Wert "A" für Key, sofern die Großbuchstabenarretierung nicht aktiviert ist. Verwenden Sie die Ereignisbehandlungsroutine für OnKeyDown oder OnKeyUp, um auf Nicht-ASCII-Tasten oder -Tastenkombinationen zu antworten.
Das heißt:
Du musst auf das OnKeyUp- bzw. OnKeyDown-Event reagieren

ferby 4. Sep 2004 22:12

Re: Tasten abfragen
 
Hallo,

Danke jetzt gehts.

Aike 21. Mai 2005 06:02

Re: Tasten abfragen
 
Diese KeyDown-Abfrage funktioniert leider nicht für die gesamte Anwendung, sondern nur für die fokussierte Form oder Listbox etc. Geht das nicht auch etwas ... globaler?

turboPASCAL 21. Mai 2005 07:37

Re: Tasten abfragen
 
Tasten immer abfangen:

Delphi-Quellcode:
unit Unit1;

...

implementation

{$R *.dfm}

function KeyPressed: Integer;
var
   i : Integer;
   buf : TKeyboardState;
begin
   Result:=-1;
   if GetKeyboardState(buf) then
   begin
      for i:=0 to High(buf) do
      begin
         if (buf[i] and $80)<>0 then
         begin
            Result:=i;
            Exit;
         end;
      end;
   end;
end;

function IsKeyDown(vk : Integer) : Boolean;
begin
  Result:=(GetAsyncKeyState(vk)<0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if IsKeyDown(vk_Escape) then windows.beep(880,20);

  case KeyPressed of
    vk_Space: windows.beep(440,20);
    // ...
    // ...
  end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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