Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi entertaste gedrückthalten unterbinden.... (https://www.delphipraxis.net/64267-entertaste-gedrueckthalten-unterbinden.html)

Hannes22549 1. Mär 2006 15:27


entertaste gedrückthalten unterbinden....
 
Hi,
ich habe ein kleines Funspiel geschrieben bei dem gemessen wird wie oft eine Taste in 30s gedrückt werden kann.
Das Problem ist, dass der Zähler auch weiter geht wenn die Entertaste gedrückt gehalten wird.
Hat jemand eine Idee wie ich das um gehen kann? :gruebel:
Ich klicke bis jetzt immer auf einen Button...

Schonmal Danke im vorraus!!!

Bin noch Anfänger^^

turboPASCAL 1. Mär 2006 15:32

Re: entertaste gedrückthalten unterbinden....
 
Eine Taste die gedrückt wird muss auch wieder losgelassen werden. verwende mal das "KeyUp"-Ereignis...

Delphi-Quellcode:
procedure TForm1.FormKeyUp(...
begin
  if key = 13 then windows.Beep(880,25);
  if key = 32 then windows.Beep(880,25);
end;
Muss mann halt abfragen, Taste gedrückt und losgelassen ?

Hannes22549 1. Mär 2006 15:39

Re: entertaste gedrückthalten unterbinden....
 
Naja...
es geht ja darum, dass der User nicht die 30s die taste gedrückt hält und der highscore bei 900 steht, sondern, dass er immer wieder neu drücken muss.
Hast du eine Idee?
Meinetwegen kann auch nur eine Taste genutzt werden die gedrückt werden muss.
Aber auch das bekomme ich nicht so richtig hin.

turboPASCAL 1. Mär 2006 15:49

Re: entertaste gedrückthalten unterbinden....
 
Einfach den aktuellen Status einer Taste merken, los geht's :

Delphi-Quellcode:
//...

implementation

//...

type
  TKeyState = (ksUp, ksDown);

var
  KeyState: TKeyState;
  Counter : Integer = 0;

procedure TForm1.FormKeyUp(Sender: TObject; var Key:Word;
  Shift: TShiftState);
begin
  if key = 13 then windows.Beep(440, 25);
  if key = 32 then windows.Beep(440, 25);

  KeyState := ksDown;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: ShiftState);
begin
  if key = 13 then windows.Beep(880, 25);
  if key = 32 then windows.Beep(880, 25);

  if KeyState = ksDown then inc(Counter);

  KeyState := ksUp;

  {Form1.} Caption := InttoStr(Counter);
end;
...hoffe mal das geht so, ist aus dem Kopf... :gruebel:

xaromz 1. Mär 2006 15:57

Re: entertaste gedrückthalten unterbinden....
 
Hallo,

wie wär's, einfach nur KeyUp zu verwenden. Das sollte doch aufs Gleiche rauskommen, und KeyUp wird im Gegensatz zu KeyDown immer nur einmal aufgerufen.

Gruß
xaromz

Hannes22549 1. Mär 2006 16:01

Re: entertaste gedrückthalten unterbinden....
 
Hey DANKE!!!! :thumb: :thumb: :thumb:
Das ist genau das richtige!

turboPASCAL 1. Mär 2006 17:08

Re: entertaste gedrückthalten unterbinden....
 
Zitat:

Zitat von xaromz
Hallo,

wie wär's, einfach nur KeyUp zu verwenden. Das sollte doch aufs Gleiche rauskommen, und KeyUp wird im Gegensatz zu KeyDown immer nur einmal aufgerufen.

Gruß
xaromz

Jupp, reicht eigentlich. Man könnte aber im KeyDown zB. eine bunte Fläche anzeigen oder so etwas. War halt nur eine Idee, wenn auch om die Ecke gedacht. ;)

Hannes22549 1. Mär 2006 18:53

Re: entertaste gedrückthalten unterbinden....
 
Wie mache ich des, wenn ich in der Butten1Click Prozedur nur die Entertaste ausschließen will???

Sharky 1. Mär 2006 18:57

Re: entertaste gedrückthalten unterbinden....
 
Zitat:

Zitat von Hannes22549
Wie mache ich des, wenn ich in der Butten1Click Prozedur nur die Entertaste ausschließen will???

:?:
Woher kommt denn auf einem eine ButtonOnClick-Ereigniss?
Das brauchst Du doch für einen Fall nicht oder?


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