![]() |
Verzögerte Abfrage bei Eingabe
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 |
AW: Verzögerte Abfrage bei Eingabe
Bei jedem Klick startest du einfach einen Timer, bzw. startest ihn neu.
Also am Einfachsten so:
Delphi-Quellcode:
Im OnTimer-Ereignis führst du dann deine Bearbeitung durch und vergi nicht den Timer gleich wieder abzuschalten.
ReaktionsTimer.Enabled := False;
ReaktionsTimer.Enabled := True;
Delphi-Quellcode:
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.
ReaktionsTimer.Enabled := False;
... // hier nun dein Code 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; |
AW: Verzögerte Abfrage bei Eingabe
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. |
AW: Verzögerte Abfrage bei Eingabe
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. |
AW: Verzögerte Abfrage bei Eingabe
Danke jetzt hab ich es verstanden wie es funktionieren soll und es tut....
Gruß, Moony |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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