AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi OnKeyDown - Taste Halten verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

OnKeyDown - Taste Halten verhindern

Ein Thema von olee · begonnen am 31. Jul 2009 · letzter Beitrag vom 31. Jul 2009
Antwort Antwort
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#1

OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:24
Hi ich hab ein kleines Problem:

Ich will im OnKeyDown einen DblKlick von Tasten abfragen.

Mein Problem ist jetzt, dass OnKeyDown beim haten einer Taste nach ner Weile mehrfach
hintereinander ausgelöst wird
(Also wie im Texteditor wenn man z.B. A hält kommt erst eins und nach ner Weile viele As)

Hat einer ne Idee, wie ich das verhindern kann?

Delphi-Quellcode:
[OnKeyDown]
begin
  If (LastKey = Key) and (LastKeyDownTime + 500 > GetTickCount) then
  begin
    DblPressedKey := Key;
    exit;
  end;
  LastKeyDownTime := GetTickCount;
  LastKey := Key;
end;
MFG
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:28
Gehts vll. besser mit dem OnKeyPress?
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:32
Ne denke nicht, da OnKeyPress doch bei manchen Tasten nicht ausgelöst wird ... ich meine bei VK_UP usw.
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#4

Re: OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:37
Evtl. kannst Du Einfluss auf den repeatcount nehmen (nur so ein spontaner Gedanke)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:40
Ha ich hab eine simple Lösung gefunden

Delphi-Quellcode:
procedure TLOZGameEngine.OnKeyDown(var Key: Word; Shift: TShiftState);
begin
  If LockKey = Key then exit;
  LockKey := Key;
  If (LastKey = Key) and (LastKeyDownTime + 500 > GetTickCount) then
  begin
    DblPressedKey := Key;
    exit;
  end;
  LastKeyDownTime := GetTickCount;
  LastKey := Key;
end;

procedure TLOZGameEngine.OnKeyUp(var Key: Word; Shift: TShiftState);
begin
  LockKey := 0;
end;
Trotzdem DANKE für eure Hilfe

MFG
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
Custom

Registriert seit: 18. Aug 2007
Ort: Mainz
203 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:44
Also was du auch machen könntest ist in deine (sofern du eine hast aber davon geh' ich aus) IdleHandler-Prozedur einen Code Schnipsel einzufügen der ähnlich aussieht aber per GetAsyncKeyState die Tasten abfragt. Zusätzlich brauchst du eben eine Liste mit den Tasten, die in frage kommen - auf die Weise ersparst du dir Rückgaben, die unnütz sind.

Delphi-Quellcode:
function GetDoubleInput: TKey//weiß grad nicht wie die variable für Tasten Bei dem verfahren heißt ^^
var
  i: integer;
begin
Result := nil;
  for i := Low(Keys) to High(Keys) do
  if GetAsyncKeyState(Keys[i])<0 then
  begin
    If (LastKey = Keys[i]) and (LastKeyDownTime + 500 > GetTickCount) then
    begin
      Result := Keys[i];
      exit;
    end;
    LastKeyDownTime := GetTickCount;
    LastKey := Keys[i];
  end;
end;
mfg Custom


Edit: PS:
Zitat von DeddyH:
Evtl. kannst Du Einfluss auf den repeatcount nehmen (nur so ein spontaner Gedanke)?
das würde glaube ich nicht gehen, da das ja vom OS festgelegt (bzw im OS "abgespeichert") ist.
absoft website

Aktuelles Projekt:
2.6D (Spiel)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: OnKeyDown - Taste Halten verhindern

  Alt 31. Jul 2009, 14:48
Ich lese "GameEngine". Wenn du dort evtl. ohnehin schon DirectX einsetzt, wäre evtl. DirectInput auch ein guter Weg. Ist in der Handhabung GetAsyncKeystate() recht ähnlich.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 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