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
shmia

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

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 12: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
 
#2

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 13: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: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 13: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
 
#4

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 14: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
 
#5

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 14: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
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 14:44
Hallo,

willst Du so ein Art Lookup implementieren?
Diese schauen aber direkt nach der Zeicheneingabe ob ein Begriff bekannt
ist welcher die bereits getippten Buchstaben am Anfang enthält.

Um das zu optimieren, kann man die Suche vielleicht erst nach dem 3 oder 4 getippten Buchstaben starten.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 25. Nov 2011, 18:14
Für's Warten gibt es GETLASTINPUTINFO:

Delphi-Quellcode:
function LastInput: DWord;
var
  LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;

Geändert von hathor (25. Nov 2011 um 18:25 Uhr)
  Mit Zitat antworten Zitat
FrankJ28

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

AW: TEdit, Tastaturpuffer gefüllt?

  Alt 26. Nov 2011, 09:34
Hallo,
Andreas hat das/mein Problem korrekt beschrieben. Der Anwender gibt im TEdit seinen Suchbegriff ein, der aus ein bis n Zeichen bestehen kann. Während der Eingabe wird (onChange) bereits ein TDataSet.Locate abgesetzt um den nächst passenden Datensatz vorzuschlagen. Bei sehr großen Datenmengen und lahmen Rechner (ADO, SQLServer) dauert so ein Locate schon einmal 0,5 Sec. Nun soll eben im OnChange geprüft werden, ob der Anwender sich seines Suchbegriffs schon so sicher ist, das es munter tippt. Dann erspare ich mir das Locate (was auch die Zeichenanzeige entsprechend verzögert und den Anwender verunsichert, habe ich schon getippt oder warte ich noch )).
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Antwort Antwort


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:52 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