Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verzögerte Vorschau (https://www.delphipraxis.net/149975-verzoegerte-vorschau.html)

martinf16 3. Apr 2010 23:31


Verzögerte Vorschau
 
Hallo,

ich möchte so etwas wie eine verzögerte Vorschau realisieren. Das heißt, der Benutzer gibt etwas ein, es wird gewartet ob noch etwas eingegeben wird und wenn einige Millisekunden nichts eingegeben wurde, wird die Vorschau erstellt.

Es geht beispielsweise um eine Eingabe in ein Editfeld. Bislang hatte ich OnChange genutzt und jedes Mal eine Vorschau erstellt. Da dies teilweise aufwendig ist und lange dauert möchte ich erst warten bis der Nutzer seine Eingabe fertig hat und dann die Vorschau erstellen. Gibts da irgendeine Möglichkeit?!

Etwas ähnliches gibt es ja auch im Delphi Editor, wo das Auto-Vervollständigen erst nach einer kurzen Pause angezeigt wird. Weiß jemand wie das realisiert wurde??

Vielen Dank!

s.h.a.r.k 3. Apr 2010 23:58

Re: Verzögerte Vorschau
 
Du kannst beim OnChange einen Timer einschalten (bzw. eher resetten), der dir dann die Berechnung anstößt.
Delphi-Quellcode:
procedure TForm1.Edit1OnChange(Sender: TObject);
begin
  // Reset des Timers
  Timer1.Enabled := False;
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
  try

   { hier kommt deine Berechnung hin. }
 
  finally
    Timer1.Enabled := False;
  end;
end;

martinf16 4. Apr 2010 00:11

Re: Verzögerte Vorschau
 
Oh das sieht gut aus.. Wusste nicht dass der Timer resetet.. Dann ginge es ja so.. Aber gibts da nicht auch einen anderen Befehl so etwas wie sleep ohne den Timer?

s.h.a.r.k 4. Apr 2010 00:13

Re: Verzögerte Vorschau
 
Das Problem ist, dass Sleep deine komplette Anwendung zum Stillstand bringt und der Nutzer nichts mehr machen kann. Du könntest einen Thread nutzen, der dann die Berechnung auch noch im Hintergrund macht, aber das ist wesentlich komplexer als das über den Timer zu lösen, aber hat auch einige Vorteil :wink:

// edit

Hab mich leider geirrt -- zumindest was den Code von D2010 angeht. Du musst den Timer erst Disablen und dann wieder Enablen um ihn zu resetten.

martinf16 4. Apr 2010 00:26

Re: Verzögerte Vorschau
 
Also könnte man den Timer dann im OnChange disablen und wieder neu loslaufen lassen oder wie meinst du das?

Ja, deswegen hatte ich ja gefragt, weil es mit Sleep nicht geht. Aber ich frage mich auch wie das zum Beispiel in der Delphi IDE gemacht wurde.. Die werden da ja sicher keinen Timer nutzen..

s.h.a.r.k 4. Apr 2010 00:47

Re: Verzögerte Vorschau
 
Wieso sollen die Entwickler keinen Timer genutzt haben? :wink: Ich denke eher, dass ein Thread im Hintergrund läuft, da dies ein wenig mehr Flexibilität bietet, wobei man sich dessen aber sicher sein muss.

Hab meinen Code oben korrigiert!

martinf16 4. Apr 2010 03:29

Re: Verzögerte Vorschau
 
Naja, der Timer wirkt auf mich immer ein bisschen unprofessionell - aber ich lasse mich gerne vom Gegenteil überzeugen.

Am Rande: Worin liegt denn die bessere Flexibilität des Threads?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 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