![]() |
Tastaturpuffer leeren
Hallo !
Ich habe ein Problem: mein Tastaturpuffer wird voll. Wie kann man den entleeren ? Ich bin also mal auf die Funktion ClearEventLog (oder so ähnlich) gestoßen. Hat die was damit zu tun ? Wenn ja, dann würd' ich gern wissen, welches File ich angeben soll. :gruebel: |
Re: Tastaturpuffer leeren
schau dir mal folgendes an, da wird auch ein key aus dem tastaturbuffer geschmissen
![]() |
Re: Tastaturpuffer leeren
Zitat:
Wie darf ich das verstehen? Zitat:
|
Re: Tastaturpuffer leeren
Zitat:
Desweiteren werden während des Prozesses Tastendrücke verlangt/erwartet. So wird der Tastaturpuffer (auf meinem Laptop zumindest) releativ schnell voll. Zitat:
|
Re: Tastaturpuffer leeren
Dann würde ich mal dafür sorgen, dass die Tasteneingaben für deine Anwendung während dieses Prozesses verarbeitet werden. Bzw. warum machst du welche, wenn du weißt, dass sie doch niocht ankommen? Mach es dem Bwenutzer deutlich, dass er erst warten muss bis der Prozess im Programm fertig ist, bevor er damit weiterarbeiten kann.
|
Re: Tastaturpuffer leeren
Zitat:
Naja, aber hauptsache ich habe die Lösung meines Problems. Mit PeekMessage kann ich - so weit ich das sehen kann - alle Messages abfangen und gegebenenfalls löschen. |
Re: Tastaturpuffer leeren
Und wa shat das für ein Sinn wenn der User 10 mal drückt und du löscht 9 Eingaben?
|
Re: Tastaturpuffer leeren
Ich hab' den Code zwar nicht parat, aber ich hab' das schon getestet. Und zwar habe ich eine Routine erstellt (Endlosschleife), die ständig Keys sendet. Nach sehr kurzer Zeit ist der Buffer überfüllt. Wenn ich aber nach jedem Senden eines Keys PeekMessage(...,pm_remove); aufrufe, erhalte ich einige Minuten lang keine Rückmeldung vom dem Buffer.
Außerdem fragt das Spiel mit Hilfe der API-Funktion GetAsyncKeyState die Tasten ab, in den Tastaturpuffer wird (soweit ich das überblicke) aber nach einem bestimmten Wiederholungsinterval ein neues Zeichen geschrieben. Die Frequenz meiner Schleife ist jedoch wesentlich höher als die der Tastenwiederholung. |
Re: Tastaturpuffer leeren
Ich kann dein Problemm wircklich nicht nachvollziehen. Die Tastaturpuffer wird sowieso automatisch "entladen", es sei denn, du hast die WM_XXX Nachrichten selbst behandelt und dabei etwas falsch gemacht. Am sonsten, sollte dein Speil immer eine Schleife durchlaufen etwas so:
Delphi-Quellcode:
, dann ist es noch besser gar keine WM_KEYXXX oder WM_CHARXX Nachrichten überhaupt selbst zu behandeln, sondern diese lässt du DefWndProc behandeln. Mit GetAsyncKeyState kommt man dann weiter, beim jeder Durchlauf überprüft man gewünschte Tasten, z.B. so:
while (not finished) do
begin // spiel end;
Delphi-Quellcode:
EDIT: Habe den letzten Beitrag übersehen, :roll: .
if Hi(GetAsyncKeyState(VK_ESCAPE))=128 then // ESC wurde gedruckt....
|
Re: Tastaturpuffer leeren
So ähnliches wollte ich auch gerade schreiben. Möglicherweise gibt es in deinem Programmcode
eine Stelle (Schleife While oder For oä.) was dein Programm "blockiert" und die Tastatureingabe nicht abarbeitet. Eine Application.ProcessMessages könnte in diesem Falle helfen.
Delphi-Quellcode:
function KeyPressed: Integer;
var i: Integer; buf: TKeyboardState; begin Result := -1; if GetKeyboardState(buf) then for i := 0 to High(buf) do if (buf[i] and $80)<>0 then begin Result := i; Exit; end; end; procedure TFormX.Steuerung... begin repeat case KeyPressed of VK_UP: ; VK_DOWN: ; VK_LEFT: ; VK_RIGHT: ; end; Application.ProcessMessages; until KeyPressed = VK_ESCAPE; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz