Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Verzögerte Abfrage bei Eingabe (https://www.delphipraxis.net/154369-verzoegerte-abfrage-bei-eingabe.html)

Moony 8. Sep 2010 15:05

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

himitsu 8. Sep 2010 15:14

AW: Verzögerte Abfrage bei Eingabe
 
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;

Moony 8. Sep 2010 15:20

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.

himitsu 8. Sep 2010 16:03

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.

Moony 9. Sep 2010 08:39

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 08:02 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