AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TEdit, Tastaturpuffer gefüllt?

Ein Thema von FrankJ28 · begonnen am 24. Nov 2011 · letzter Beitrag vom 26. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2      
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#1

TEdit, Tastaturpuffer gefüllt?

  Alt 24. Nov 2011, 10:33
Hallo,
ich habe ein TEdit in das ein Suchbegriff eingegeben werden kann. Im Event OnChange wird dann die gewünschte Suche ausgeführt. Da das natürlich bei jedem Zeichen erfolgt würde ich gerne im Event prüfen, ob der Anwender noch munter tippt, also der Tastaturpuffer/Event noch etwas hergibt. In dem Fall würde ich den Suchvorgang nicht durchführen wollen. Bin über jeden Tip dankbar.

Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 24. Nov 2011, 10:41
Hi,

Das würde nur gehen, wenn du in die Zukunft blicken könntest, wenn ich dich richtig verstehe. Ich würde mir einfach die Zeit der letzten Eingabe ins Textfeld merken und dann einen Timer aktivieren. Wenn der Timer zuschlägt und seit der gemerkten Zeit 1-2 Sekunden vergangen sind, könnte man die Suche ausführen.

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 24. Nov 2011, 10:42
Über einen Timer die Suchanfrage starten. Wegen des Intervalls musst du einfach mal schauen, was am effektivsten ist.

Ein hektischer Schnelltipper = 250ms
Ein entspannter Ein-Finger-Schreiber = 2000ms

Delphi-Quellcode:
procedure TForm1.EditSearchOnChange( Sender : TObject );
begin
  // Such-Timer zurücksetzen
  TimerSearch.Enabled := False;
  TimerSearchEnabled := True;
end;

procedure TForm1.TimerSearchOnTimer( Sender : TObject );
begin
  TimerSearch.Enabled := False;
  // Suche starten
  DoSearch( EditSearch.Text );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 08:17
Hallo,
danke euch beiden für eure Zeit. Die Timerlösung hatte ich auch schon, hegte aber die Hoffnung, dass es irgend einen Systemcall gibt, der den Status des Tastaturpuffers zurückliefern könnte (schlagt mich, aber: so schön wie zu DOS-Zeiten).
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 12:39
Hallo,
...hegte aber die Hoffnung, dass es irgend einen Systemcall gibt, der den Status des Tastaturpuffers zurückliefern könnte (schlagt mich, aber: so schön wie zu DOS-Zeiten).
Frank
Gibt's natürlich auch unter Windows. Aber woher soll der Tastaturpuffer denn eigentlich wissen, ob der Benutzer bereits fertig ist mit seiner Eingabe oder ob da vielleicht noch was kommt ?
Einzige Lösung ist also, wie bereits vorgeschlagen, ein Timer oder aber ein "Fertig"- Button für den Benutzer als Auslöser der Suche.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 13:39
Versuch' mal das:
Delphi-Quellcode:
function IsKeyboardBufferEmpty:boolean;
var
   Msg: TMsg;
begin
   Result := not PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_NOREMOVE);
end;
Andreas
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 14:01
Hallo,
@ASM: Die Suche erfolgt "on the fly", während der Eingabe. Unnötige Suchanfragen sollen aber unterdrückt werden. Unnötig heißt, der Anwender tippt noch.

@Andreas: Das macht auf den ersten Blick einen guten Eindruck. Ich teste mal und gebe Feedback.

Danke
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 14:28
Versuch' mal das: ...
Mit Verlaub, wie soll denn dies das beschriebene, konkrete Problem lösen können ?
So schnell, wie unter Windows der Tastaturpuffer verarbeitet, also wieder geleert wird, kann keiner eintippen. Da kann man de facto keine sinnvollen Fragmente der Eingaben in das Editfeld "on the fly" abfangen. Und was sollte dann der leere Tastaturpuffer aussagen ?

Wenn man absolut keinen Timer (on the fly!) verwenden will, könnte man eigentlich nur die fertige Eingabe im Editfeld abwarten, die ja entweder (implizit) durch ein abschließendes RETURN oder (explizit) durch ein Verlassen des Editfeldes signalisiert wird:

Code:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_RETURN then Edit1Exit(Sender);
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
 DoSearch(StrToInt(Edit1.text)); // oder welche Aufgabe sonst
end;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 15:18
Mit Verlaub, wie soll denn dies das beschriebene, konkrete Problem lösen können ?
So schnell, wie unter Windows der Tastaturpuffer verarbeitet, also wieder geleert wird, kann keiner eintippen.
Die Geschwindigkeit, mit der Tastenevents aus der Message Queue entnommen werden, hängt allein von der Anwendung ab.
Beispiel:
* Benutzer tippt Buchstabe "D" und macht ein kleine Pause
* 300ms später fängt die Anwendung an zu suchen und benötigt dazu 0,5s
* in der Zwischenzeit hat der Benutzer "elphi" eingetippt
* das nächste Zeichen, dass die Anwendung sieht, ist das "e"
Jetzt wäre es durchaus interessant zu wissen, dass "lphi" auch noch in der Message Queue liegt.

Für die Suchfunktion selbst wäre es ebenfalls von Nutzen zu wissen ob neue Tasteneingaben vorhanden sind.
Sobald neue Tasteneingaben vorliegen sollte die Suchfunktion sofort beendet werden.
Andreas
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 15:34
Meistens mache ich es wie ASM, manchmal aber auch so.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FEditChangeFlag:= false;
end;

procedure TForm1.EditChange(Sender: TObject);
begin
  if FEditChangeFlag then Exit;
  FEditChangeFlag:= true;
  // .. Code
  FEditChangeFlag:= false;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:41 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