OnKeyDown - Taste Halten verhindern
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:
MFG
[OnKeyDown]
begin If (LastKey = Key) and (LastKeyDownTime + 500 > GetTickCount) then begin DblPressedKey := Key; exit; end; LastKeyDownTime := GetTickCount; LastKey := Key; end; |
Re: OnKeyDown - Taste Halten verhindern
Gehts vll. besser mit dem OnKeyPress?
|
Re: OnKeyDown - Taste Halten verhindern
Ne denke nicht, da OnKeyPress doch bei manchen Tasten nicht ausgelöst wird ... ich meine bei VK_UP usw.
|
Re: OnKeyDown - Taste Halten verhindern
Evtl. kannst Du Einfluss auf den repeatcount nehmen (nur so ein spontaner Gedanke)?
|
Re: OnKeyDown - Taste Halten verhindern
Ha ich hab eine simple Lösung gefunden :lol:
Delphi-Quellcode:
Trotzdem DANKE für eure Hilfe :thumb:
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; MFG |
Re: OnKeyDown - Taste Halten verhindern
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:
mfg Custom
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; Edit: PS: Zitat:
|
Re: OnKeyDown - Taste Halten verhindern
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 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