AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Tastaturpuffer leeren

Ein Thema von Cicaro · begonnen am 8. Jul 2005 · letzter Beitrag vom 22. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2   
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

Tastaturpuffer leeren

  Alt 8. Jul 2005, 18:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Tastaturpuffer leeren

  Alt 8. Jul 2005, 18:55
schau dir mal folgendes an, da wird auch ein key aus dem tastaturbuffer geschmissen
http://www.delphipraxis.net/internal...=208058#208058
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
35.208 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Tastaturpuffer leeren

  Alt 8. Jul 2005, 18:57
Zitat von Cicaro:
Ich habe ein Problem: mein Tastaturpuffer wird voll.
Ähm.
Wie darf ich das verstehen?
Zitat:
Wie kann man den entleeren ?
Ich hatte noch nie das Bedürfniss den Tastaturbuffer zu leeren und sehe auch keinen Sinn darin.
Michael
"Every language has an optimization operator. In Delphi that operator is: //"
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#4

Re: Tastaturpuffer leeren

  Alt 8. Jul 2005, 19:14
Zitat von Luckie:
Zitat von Cicaro:
Ich habe ein Problem: mein Tastaturpuffer wird voll.
Ähm.
Wie darf ich das verstehen?
Ich habe einen 'scheinbar' endlosen Prozess, den der Taskmanager mit "reagiert nicht" markiert.
Desweiteren werden während des Prozesses Tastendrücke verlangt/erwartet. So wird der Tastaturpuffer (auf meinem Laptop zumindest) releativ schnell voll.
Zitat:
Zitat:
Wie kann man den entleeren ?
Ich hatte noch nie das Bedürfniss den Tastaturbuffer zu leeren und sehe auch keinen Sinn darin.
Aber spätestens dann, wenn es anfängt zu piepen!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
35.208 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Tastaturpuffer leeren

  Alt 8. Jul 2005, 19:17
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.
Michael
"Every language has an optimization operator. In Delphi that operator is: //"
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#6

Re: Tastaturpuffer leeren

  Alt 12. Jul 2005, 08:51
Zitat von Luckie:
Mach es dem Bwenutzer deutlich, dass er erst warten muss bis der Prozess im Programm fertig ist, bevor er damit weiterarbeiten kann.
"Hallo, lieber user meines Spiels. Du darfst, während das Spiel läuft, keine Tastatureingaben machen, obwohl das Spiel nur über die Tastatur bedient werden kann."

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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
35.208 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Tastaturpuffer leeren

  Alt 12. Jul 2005, 08:55
Und wa shat das für ein Sinn wenn der User 10 mal drückt und du löscht 9 Eingaben?
Michael
"Every language has an optimization operator. In Delphi that operator is: //"
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#8

Re: Tastaturpuffer leeren

  Alt 12. Jul 2005, 10:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Tastaturpuffer leeren

  Alt 12. Jul 2005, 10:19
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:
while (not finished) do
begin
// spiel
end;
, 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: if Hi(GetAsyncKeyState(VK_ESCAPE))=128 then // ESC wurde gedruckt.... EDIT: Habe den letzten Beitrag übersehen, .
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.268 Beiträge
 
Delphi 6 Personal
 
#10

Re: Tastaturpuffer leeren

  Alt 12. Jul 2005, 10:44
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf