AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Edit.OnChange-Event für eine bestimmte Zeit verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Edit.OnChange-Event für eine bestimmte Zeit verhindern

Ein Thema von juergen · begonnen am 28. Okt 2011 · letzter Beitrag vom 29. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#1

Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 28. Okt 2011, 22:13
Hallo zusammen,

ich suche eine Möglichkeit das OnChange-Event eines Edits für eine gewisse Zeit zu "blockieren".
Hintergrund:
In einem Edit wird ein Suchtext eingegeben und über das OnChange-Event wird "live" in einer StringList gesucht.
Somit wird ja nach jeder Tastenbetätigung die Suche ausgelöst. Und das kann schon mal etwas dauern.

Wenn man 250ms(?) im Edit nichts eingegeben hat, dann soll erst das OnChange angewendet werden.

Hat hierzu jemand einen Vorschlag wie sowas umzusetzen wäre?

Danke schon mal vorab für Hilfestellungen!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 28. Okt 2011, 22:19
Da gibt es sicher Wege (Enabled := False oder den Mauszeiger zumindest auf die Sanduhr einstellen).

Der richtige Weg wäre aber m.E., die Suche zu unterbrechen und neu zu starten.
Das kann rel. aufwendig werden, aber eine solche Lösung ist aus meiner Sicht notwendig.
(Wenn die Suche über ein SQL-Statement erfolgen würde, wäre eine solche Unterbrechung jedoch wohl nicht zu erreichen.)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 28. Okt 2011, 22:26
wenn Du #13 im Keypress auswertest, also nur bei Enter suchst?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 28. Okt 2011, 22:26
Timer?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 28. Okt 2011, 22:28
Es wäre doch möglich, das ganze in einem Timer ablaufen zu Lassen:
Delphi-Quellcode:
procedure TForm1.Edit1Change(...)
begin
  Timer1.Enabled:=false;
  Timer1.Enabled:=true;//Timer zurücksetzen
end;
procedure TForm1.Timer1Timer(...)
begin
  //Suche in der StringList
end;
Den Timer noch auf 1/4 Sekunde einstellen.
EDIT: Lieber spät als nie
Edit2: Von mir aus auch ne 1/4 Sekunde...
Delphi programming

Geändert von WM_CLOSE (28. Okt 2011 um 22:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 28. Okt 2011, 22:30
Auf 1/4 Sekunde
Edit2: Von mir aus auch ne 1/4 Sekunde...
Nein, von ihm aus
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (29. Okt 2011 um 00:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 29. Okt 2011, 00:05
Erst einmal Danke für die Unterstützung!
@stahli,
Dein Ansatz hört sich interesaant an, ich wüßte nur leider nicht wie ich sowas umsetzen könnte.

@Bummi,
das habe ich schon , da man optional die Live-Suche auch abschalten kann und ich dann auf Enter reagiere.
Das ist auch richtig schnell.

@Sir Rufo, WM_CLOSE
naja mit Timer da tue ich mich etwas schwer, da ich hier schon gelesen hatte, wo Timer "verteufelt" wurden.
Den Ansatz von WM_Close vertehe ich so aber auch nicht.
Der Timer ist auf einen Intervall von 250 eingestellt und Enabled := False...
Dann wird im OnChange der Timer auf "False" gesetzt und anschließend auf true....
Im OnTimer-Event dann das Suchen ausführen.
Meinem Verständnis nach würde die Suche doch in einer Endlosschleife ausgeführt werden, oder nicht?

Vllt. habe ich mich auch nicht so deutlich ausgedrückt.
Angenommen ich tippe 8 Zeichen in 2 Sekunden in das Edit ein. Dann wird 8x meine Suche angeschmissen, weil diese im OnChange des Edits hinterlegt ist.
Ich hätte gern, dass nur dann die Suche ausgeführt wird wenn nach einer Eingabe im Edit mindestens 250ms(?) vergangen sind.

Edit: Die Live-Suche startet erst dann, wenn mindestens 3 Zeichen eingegeben wurden.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 29. Okt 2011, 00:13
Delphi-Quellcode:
procedure TForm1.Edit1Change(...)
begin
  Timer1.Enabled := false;
  Timer1.Enabled := ( Length( Edit1.Text ) >= 3 );
end;
procedure TForm1.Timer1Timer(...)
begin
  Timer1.Enabled := False;
  DoSuche( Edit1.Text );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (29. Okt 2011 um 00:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 29. Okt 2011, 00:24
Also "Timer ist böse" würde ich so auch nicht so gelten lassen.
Ich klaue gleich mal beim Sir.
Als ungefährerer Ansatz:

Delphi-Quellcode:
 procedure TForm1.Edit1Change(...)
 begin
   BreakFlag := True;
   Timer1.Enabled := False; // Timer wird neu gestartet, keine Suche bei schneller Eingabe
   Timer1.Enabled := True;
 end;

 procedure TForm1.Timer1Timer(...)
 begin
   Timer1.Enabled := False;
   BreakFlag := False;
   DoSuche( Edit1.Text );
 end;

 procedure DoSuche;
 begin
   for I := 0 to Items.Count - 1 do
   begin
     ...
     Application.ProcessMessages;
     if BreakFlag then
       Break;
   end;
   BreakFlag := False;
 end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Edit.OnChange-Event für eine bestimmte Zeit verhindern

  Alt 29. Okt 2011, 00:43
Supi, so funktioniert es!
Da hätte ich auch selbst drauf kommen müssen, dass ich im OnTimer zuerst Timer1.Enabled := False setzen muss!

Vielen Dank und eine Gute N8!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:43 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