Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastaturpuffer leeren (https://www.delphipraxis.net/49307-tastaturpuffer-leeren.html)

runger 12. Jul 2005 10:17

Re: Tastaturpuffer leeren
 
Hallo,

warum helft ihr ihm nicht einfach? Was soll dieses rumdiskutieren?
Vielleicht ist es auch für andere Anwendungen sinnvoll den Tastaturbuffer zu leeren.

Rainer

turboPASCAL 12. Jul 2005 11:16

Re: Tastaturpuffer leeren
 
Wie kann ich denn den Tastaturpuffer leeren ? function ClearKeyboardBuffer:Integer;

Siehe auch: http://www.swissdelphicenter.ch/de/showcode.php?id=1066

runger 12. Jul 2005 12:29

Re: Tastaturpuffer leeren
 
Na also,

geht scheinbar doch ohne unnötige Diskussion.

Rainer

turboPASCAL 12. Jul 2005 12:44

Re: Tastaturpuffer leeren
 
@runger, aber ob das Cicaro so von Nutzen ist ist eine andere Frage.
:gruebel: Ich habe es noch nicht geschaft einen Tastaturpuffer zum überlaufen zu bringen :stupid:,
deshalb würde es mich Interessieren wie das bei Cicaro sein kann.

Cicaro 21. Jul 2005 20:14

Re: Tastaturpuffer leeren
 
Zitat:

Zitat von turboPASCAL
@runger, aber ob das Cicaro so von Nutzen ist ist eine andere Frage.
:gruebel: Ich habe es noch nicht geschaft einen Tastaturpuffer zum überlaufen zu bringen :stupid:,
deshalb würde es mich Interessieren wie das bei Cicaro sein kann.

Führ' mal den Code hier aus!
Delphi-Quellcode:
repeat
  Keybd_Event(48,0,0,0); // Sendet ein Zeichen ('0')
until GetAsyncKeyState(27)<0; // Esc zum Abbrush
Und ? Ist er übergelaufen ? :-D

turboPASCAL 21. Jul 2005 20:20

Re: Tastaturpuffer leeren
 
Zitat:

Zitat von Cicaro
Und ? Ist er übergelaufen ? :-D

:gruebel: Sowas mach ich doch nicht freiwillig :lol:

BlackJack 22. Jul 2005 09:54

Re: Tastaturpuffer leeren
 
Zitat:

Zitat von Cicaro
Führ' mal den Code hier aus!
Delphi-Quellcode:
repeat
  Keybd_Event(48,0,0,0); // Sendet ein Zeichen ('0')
until GetAsyncKeyState(27)<0; // Esc zum Abbrush
Und ? Ist er übergelaufen ? :-D

sorry, da passiert bei mir überhaupt nichts - nur das hauptprogramm bleibt stehen - und das ist ja auch klar weil er in der schleife feststeckt. wenn man da ein Application.Processmessages reinmacht passiert dann wirklich gar nichts, man kann ganz normal weiter machen... so what...

des weiteren kann ich nur zustimmen dass die lösung mit erst tastaturpuffer durch selbst gesendete messages volllaufen lassen und dann wieder leeren ja wohl nicht das wahre sein kann. im allgemeinem musste ich mich noch nie um meinen "tastaturpuffer" kümmern (ausser mit dem guten alten DOS).

es soll hier auch noch gesagt sein dass es eigentlich einen puren tastaturpuffer gar nicht gibt. immer wenn eine taste gedrückt wird wird eine message an das aktive fenster gesendet, und die wird, wenn noch andere messages anstehen, einfach hinter den anderen messages eingereiht, also z.b. auch hinter messages für mausbewegungen etc. und dass sich so ein "Messagestau" bildet kann eigentlich nur passieren wenn du in einer schleife die ganze zeit rackerst und die messages nicht zwischendurch mit Application.Processmessages abarbeiten lässt. und das sollte man tunlichst vermeiden, da das dann aussieht, als würde die anwendung hängen beleiben, da du z.b. auch nciht mehr das fenster resizen kannst.

auch ja und ich denke mal das der code zum tastaturpuffer leeren die gesamte messagequeue löscht, d.h. auch alle messages bezüglich mausbewegungen etc., und ich weiss ja nicht ob es das ist was du möchtest.

Cicaro 22. Jul 2005 16:00

Re: Tastaturpuffer leeren
 
Also eigentlich hab' ich ja die Lösung meines Problems schon bekommen (PeekMessage). Doch die Diskussion find' ich auch interessant. Ich werd' mir noch Application.Processmessages anschauen.

Kleine Entschuldigung für den Code: Keine Ahnung warum aber jetzt funktioníert es auch bei mir nicht.
:gruebel: Hm, ... gestern hab' ich C: formatiert und das System noch mal raufgejagt. Aber davor funktionierte es. Wirklich! :gruebel:

@BlackJack: meinst du wirklich, die Mausbewegungen werden als Messages in die Schlange der nicht-verarbeiteten Messages gestellt ? Meiner Meinung nach werden sie vom System über Interrupts ermittelt und verarbeitet. Das gilt auch für die Tastatur. Zusätzlich dazu (wenn es erforderlich ist, z.B.: wenn die Maus über ein Formular bewegt wird oder der Tastendruck an ein Control oder ähnliches addressiert ist) sendet das System ihre Messages an die Formulare. Und genau die gilt es zu löschen.
Korrigiert mich, wenn ich mich irre !

BlackJack 22. Jul 2005 16:10

Re: Tastaturpuffer leeren
 
Zitat:

Zitat von Cicaro
@BlackJack: meinst du wirklich, die Mausbewegungen werden als Messages in die Schlange der nicht-verarbeiteten Messages gestellt ? Meiner Meinung nach werden sie vom System über Interrupts ermittelt und verarbeitet. Das gilt auch für die Tastatur.

klar verarbeitet das system die mausbewegungen direkt (sonst könne man ja z.b. über einem hängen gebliebenen fenster nicht die maus bewegen), aber das system schcickt dann gleichzeitig auch nachrichten an das fenster, dass sich z.b. die maus dadrüber bewegt oder geklickt hat. und wenn diese messages auch gelöscht werden würden könntest du z.b. OnMouseMove oder OnClick nicht mehr benutzen.

von daher rate ich dringenst davon ab, einfach ständig die message-warteschleife zu löschen.

turboPASCAL 22. Jul 2005 17:11

Re: Tastaturpuffer leeren
 
Delphi-Quellcode:
procedure ProcessMessages(HWND: DWORD);
var Msg: TMsg;
begin
  While PeekMessage(Msg, HWND, 0, 0, PM_REMOVE) do // Nachrichten abfragen und Verarbeiten..
  begin
    TranslateMessage(Msg); // umwandeln der Virtual-Key Messages zu Character Messages
    DispatchMessage(Msg); // Messagesr Verarbeiten
  end;
end;
TApplication.ProcessMessages macht auch nix anderes.

...den Rest hat BlackJack beantwortet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 2 von 2     12   

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