![]() |
Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Ich bin mir nicht mehr ganz sicher woher ich das Verhalten kenne welches ich unten erkläre. Aber ich hoffe ich erkläre es verständlich.
In meinem Programm gibt es ein TEdit und es dient als Eingabe für eine Suchmaske. Ein Filter entscheidet dann welche VST Knoten angezeigt werden sollen und welche nicht. Der Filtercode ist schnell aber ich würde gerne unnötige Aufrufe vermeiden. Die Eingabe von A, B und danach C, also ABC, ruft die Filtermethode dreifach auf und die Nodes werden dreifach gefiltert. Ich würde gerne wissen, ob es eine Möglichkeit gibt auf das Ende der Eingabe zu warten und dann erst den Filter aufzurufen. Das Event OnExit kommt wegen Gründen der Benutzerunfreundlichkeit leider nicht in Frage. Hier wird ein Thread als Lösung vorgeschlagen. Bei jeder neuen Eingabe ins Edit wird der aktuelle Thread gekillt und ein neuer erstellt. Das ist meiner Meinung nach aber kontraproduktiv und kostet sogar noch mehr Zeit. ![]() |
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Das Programm muss ja wissen, wann die Eingabe beendet ist. Da es nicht hellsehen kann, muss es der Benutzer dem Programm mitteilen. Also die Suche erst auslösen, wenn der Benutzer Return oder so gedrückt hat.
|
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Zähl doch einfach die Buchstaben die der User eingibt und lege in Deiner Software ein Wert fest ab wann die Abfrage ausgeführt werden soll. Bei einem Wert von 3 werden nach 3, 6, 9 … Abfragen ausgeführt.
|
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Hallo,
wir haben das über einen Timer gelöst. Jedes OnKeypress setzt den Timer zurück. Ein Timer-Intervall von 600 msec sorgt dann dafür, dass nach 600 msec Nichteingabe eines Zeichens das OnTimer aufgerufen und dort drin dann die Suche gestartet wird. Man könnte das ganze auch "verzögerte Suche" nennen. |
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Ich möchte bei solchen Livefiltern als Benutzer allerdings nicht länger warten als nötig. Zudem fühlt es sich einfach moderner an, wenn man die Ergebnisaktualisierung direkt beim Tippen sieht.
Deshalb verzögere ich selbst solche Filterungen nur, wenn die Ergebnismenge noch zu hoch ist oder die Suche mehr als wenige Millisekunden dauert. |
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Zitat:
Zitat:
|
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Wir benutzen auch einen Timer, der bei jedem Tastendruck zurückgesetzt wird. Wenn ich mich recht erinnere, steht er auf 500 ms (1/2 Sekunde). Bisher hat sich noch keiner darüber beschwert (zumindest nicht bei mir).
In unserem Fall geht es darum, zu überprüfen, ob die Eingabe der Name einer existierenden Datei bzw. eines existierenden Verzeichnisses ist. Da das teilweise zu Zugriffen auf das LAN führt und einen langen Timeout nach sich ziehen kann, wenn der Rechner, auf den zugegriffen wird, nicht eingeschaltet ist, sorgt diese Verzögerung dafür, dass man weniger warten muss als wenn bei jedem Tastendruck geprüft würde. Beispiel: \\server1\share\bla\blub.txt existiert nicht, aber \\server2\share\bla\blub.txt schon. Der User hat sich schlicht vertippt bzw. einen falschen Pfad per Zwischenablage eingefügt. Wenn er jetzt "schnell genug" (1 Tastendruck pro 500 ms ist nicht besonders schwierig) den Fehler korrigiert, erspart es ihm die mehrere Sekunden Timeout, die die Prüfung auslösen könnte. |
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Zitat:
|
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Zitat:
Und bei OnkEyPress ein MyTimer.Active := False; MyTimer.Active := True; Damit staten dann die xxx ms neu. |
AW: Auf Ende der Eingabe im TEdit warten und Inhalt verzögert verarbeiten
Die Technik wurde erfolgreich eingebaut.
Die erste Testperson war meine Lebensgefährtin und sie bevorzugt die Suche mit sofortigem Ergebnis. Grund sei, sie kenne eine solche verzögerte Suche nicht und sie sei langsam. Der Timer wird im OnChange zurückgesetzt und die Verzögerung beträgt 500ms. OnChange, weil er dann auch zurückgesetzt wird, wenn ich das Edit.Text Property per Code setze und nicht durch manuelle Eingabe. Welche Methode ist heutzutage die von Benutzern eher akzeptierte Methode? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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 by Thomas Breitkreuz