Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastenverzögerung abstellen (https://www.delphipraxis.net/145846-tastenverzoegerung-abstellen.html)

Simme 9. Jan 2010 10:55


Tastenverzögerung abstellen
 
Dann komme ich mal gleich zu meiner nächsten Frage.
Ich bin gerade dabei ein kleines Spiel zu erstellen und würde ganz gerne die Tastenverzögerung, die eben wie ein Textdokument auch mein Programm betrifft, abstellen. Dabei meine ich, dass er auf den ersten tastendruck reagiert, wenn man aber längere Zeit auf der Taste draufbleibt, der Computer nach dem ersten Zeichen erstmal eine Zeitverzögerung von ca. 0,5 Sekunden zulässt. Ich weiß, dass man das in Windows unter den Optionen für die Tastatur umstellen kann. Allerdings würde ich das ganz gern nur für mien Programm umstellen. Alle Beiträge, die ich bisher dazu gelesen habe, habe ich nicht so richtig verstanden oder es gab auch keine richtige Lösung des Problems.
Ich wäre dankebar für jede Hilfe.

Lg,
Simme

SirThornberry 9. Jan 2010 11:50

Re: Tastenverzögerung abstellen
 
Um was für ein Programm handelt es sich denn? Wenn man in deinem Programm ebenso Text eingibt wäre es für den Nutzer verwirrend wenn er dort etwas tippt und nach einem Tastendruck bereits 5000 mal das Zeichen im Textfeld steht.
Wenn es nicht um die Eingabe von Text geht kann ich das ganze nicht verstehen. Denn die Tastenverzögerung sorgt nur dafür das "keypress" mehrfach verzögert ausgelöst wird. Die Anzahl an KeyDowns und KeyUps bleibt gleich.

Simme 9. Jan 2010 12:31

Re: Tastenverzögerung abstellen
 
Nein, es handelt sich - wie gesagt - um ein Spiel.

Es geht dabei nicht um die Anschlagsverzögerung, sondern darum, dass wenn ich beispielsweise die Taste 'f' gedrückt halte. Dann zeigt er einmal eine Reaktion und dann für ca. 0,5 Sekunden nichts. Und dann wird die Reaktion kontinuierlich und ohne Zeitverzögerung angezeigt. Ich möchte mit dem Tastendruck die Bewegung eines Images auf der Form erzeugen und dieses sollte sich schon von anfang an kontinuierlich und ohne Zeitverzögerung bewegen.

habt ihr eine Idee?

Lg,
Simme

Namenloser 9. Jan 2010 15:57

Re: Tastenverzögerung abstellen
 
Frag in einer Schleife oder einem Timer die entsprechende Taste mit GetAsyncKeyState ab.
Delphi-Quellcode:
if (GetAsyncKeyState(ord('A')) < 0) then
  Figur.X := Figur.X-1;

SirThornberry 9. Jan 2010 16:11

Re: Tastenverzögerung abstellen
 
das ist nicht mal nötig. Im KeyDown einfach den Timer anwerfen (mit der gewünschten Frequenz) und im KeyUp den Timer wieder abstellen.

Simme 9. Jan 2010 16:30

Re: Tastenverzögerung abstellen
 
Und wie werf ich den Timer an?

Namenloser 9. Jan 2010 16:41

Re: Tastenverzögerung abstellen
 
Zitat:

Zitat von SirThornberry
das ist nicht mal nötig. Im KeyDown einfach den Timer anwerfen (mit der gewünschten Frequenz) und im KeyUp den Timer wieder abstellen.

Das geht natürlich auch, ist aber mehr Aufwand. Die meisten Spiele haben sowieso schon eine Hauptschleife, in die sich die Tastenabfrage prima integrieren lässt.

Die Muhkuh 9. Jan 2010 16:46

Re: Tastenverzögerung abstellen
 
Zitat:

Zitat von Simme
Und wie werf ich den Timer an?

Delphi-Quellcode:
TimeName.Enabled := true

implementation 9. Jan 2010 19:07

Re: Tastenverzögerung abstellen
 
Zitat:

Zitat von SirThornberry
Die Anzahl an KeyDowns und KeyUps bleibt gleich.

OnKeyDown wird auch mehrmals aufgerufen.
OnKeyPress (WM_CHAR) ist eigentlich nur eine Wiederholung von OnKeyDown (WM_KEYDOWN), bei der der virtuelle Tastencode in ein ASCII-Zeichen übersetzt wurde.
MSDN-Library durchsuchenTranslateMessage

Simme 25. Mär 2010 17:12

Re: Tastenverzögerung abstellen
 
So, ich habe jetzt endlich herausgefunden, wie ein Timer arbeitet. Jetzt ist mir auch verständlich, dass ich damit ganz einfach das Problem beheben kann. =) Danke!


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