AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Verzögerte Abfrage bei Eingabe
Thema durchsuchen
Ansicht
Themen-Optionen

Verzögerte Abfrage bei Eingabe

Ein Thema von Moony · begonnen am 8. Sep 2010 · letzter Beitrag vom 9. Sep 2010
Antwort Antwort
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

Verzögerte Abfrage bei Eingabe

  Alt 8. Sep 2010, 16:05
Hallo zusammen,

ich habe bei mir zum Beispiel ein Suchfeld (TEdit) und möchte bei Änderung/Tippen die Suche auf meine Datenmenge ausführen. Das kann zu erheblicher Zeitverzögerung führen, deshalb möchte ich erst die Suchanfrage starten, wenn ich nach z.b. 2 Sekunden keine Eingabe mehr durchgeführt habe. Eigentlich muss das im Bereich von KeyDown bzw. KeyUp passieren, aber ich habe noch nicht den Faden gefunden wie man das am Besten durchführt. Das gleiche möchte ich auch bei einer Trackbar machen, dass nicht bei jedem Tick die Abfragen stattfinden, sondern erst wenn ich Zeit x nicht getickt habe.
Hoffe ihr könnt mir helfen.

Danke und Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verzögerte Abfrage bei Eingabe

  Alt 8. Sep 2010, 16:14
Bei jedem Klick startest du einfach einen Timer, bzw. startest ihn neu.
Also am Einfachsten so:
Delphi-Quellcode:
ReaktionsTimer.Enabled := False;
ReaktionsTimer.Enabled := True;
Im OnTimer-Ereignis führst du dann deine Bearbeitung durch und vergi nicht den Timer gleich wieder abzuschalten.
Delphi-Quellcode:
ReaktionsTimer.Enabled := False;
... // hier nun dein Code
Eventuell kann man auch im OnTimer-Ereignis, wärend der Bearbeitung, prüfen, ob nochmal das ein Klickereignis reingekommen ist und dann die earbeitung unterbrechen/abbrechen.
Sobald das nächste Timerereignis aus ausgeführt wird, wird dann die verarbeitung neu ausgeführt, bzw. fortgeführt.

Delphi-Quellcode:
// beim Klicken
ReaktionsTimer.Enabled := False;
ReaktionsTimer.Enabled := True;
KlickVariable := True;
Delphi-Quellcode:
// im Timerereignis
ReaktionsTimer.Enabled := False;
KlickVariable := False;
for i := 0 to 1000 do begin
  
  ... // hier nun dein Code
  Sleep(88); // als Beispiel "nix", darum 'ne Pause

  Application.ProcessMessages;
  if KlickVariable then break;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Verzögerte Abfrage bei Eingabe

  Alt 8. Sep 2010, 16:20
Aber wenn ich doch bei jedem Klick meinen Timer neu starte und im Timer meine Bearbeitung die ich sonst immer durchgeführt habe nun durchführe, dann ändert sich doch nichts an meiner Situation.

Als Beispiel:

Ich habe ein Suchfeld (TEdit). Jetzt tippe ich innerhalb einer Sekunde Muster in das Feld ein. Im Moment führe ich eine Suche auf meine Datenmenge bei jeder Änderung im Suchfeld aus. Hier soll erst nach 1 Sekunde nachdem der letzte Buchstabe - hier "r" - eingetippt wurde erst die Suchanfrage gestartet werden.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verzögerte Abfrage bei Eingabe

  Alt 8. Sep 2010, 17:03
Immer wenn ein Buchstabe getippt wird, dann startest du den Timer neu.
(Intervall wäre deine 1 Sekunde)

Wenn wärend dieser Zeit nochmal ein Buchstabe eingetippt wird, dann wird dadurch der Timer angehalten und erneut mit dieser einen Sekunde gestartet.
Erst wenn man länger als 1 Sekunde (bzw. "fast" genau 1 Sekunde) nichts eingibt, dann wird das Timerereignis ausgelöst.
$2B or not $2B
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Verzögerte Abfrage bei Eingabe

  Alt 9. Sep 2010, 09:39
Danke jetzt hab ich es verstanden wie es funktionieren soll und es tut....

Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  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 23:50 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