Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memo hängt sich bei vielen Daten auf (https://www.delphipraxis.net/147321-memo-haengt-sich-bei-vielen-daten-auf.html)

Hansi 5. Feb 2010 19:22


Memo hängt sich bei vielen Daten auf
 
Hallo,

Die Ergebnisse meiner DB Auswertung gebe ich über Memo1.Lines.Add usw aus. Leider hängt sich mein kleines Programm immer ziemlich schnell auf sodass ich nicht mehr sehe was er im Memo hinzufügt. Erst wenn er fertig ist sehe ich alle Daten im Memo.

Kann ich das irgendwie ändern?

Gruss...

mkinzler 5. Feb 2010 19:25

Re: Memo hängt sich bei vielen Daten auf
 
Lasse hin und wieder die Oberfläche neu zeichnen (
Delphi-Quellcode:
Application.ProcessMessages;
)

Hansi 5. Feb 2010 19:30

Re: Memo hängt sich bei vielen Daten auf
 
meinst du mit einem Art Timer?

Oder wie soll ich das machen?

mkinzler 5. Feb 2010 19:31

Re: Memo hängt sich bei vielen Daten auf
 
Nein, z.B. alle 100 DS oder so

Hansi 5. Feb 2010 19:39

Re: Memo hängt sich bei vielen Daten auf
 
kannst Du mir bitte einen kleinen Tip geben wie ich die Oberfläche neu zeichne?

Wo und wie gebe ich das Application... an?

mkinzler 5. Feb 2010 19:42

Re: Memo hängt sich bei vielen Daten auf
 
Delphi-Quellcode:
while not <DS>.Eof do
begin
    <MachWas>
    inc(i);
    if i div 10 = 0 then //Alle 10 DS
        Application.ProcessMessages; //Befehl sorgt dafür, das die Messages verarbeitet werden.
    <DS>.Next;
end;

Hansi 5. Feb 2010 19:59

Re: Memo hängt sich bei vielen Daten auf
 
Super danke; Jetzt funktionierts

himitsu 5. Feb 2010 20:19

Re: Memo hängt sich bei vielen Daten auf
 
Schneller geht es aber, wenn man noch mit BeginUpdate arbeitet.

Ist zwar etwas aufwändiger, aber es lohnt sich.
Delphi-Quellcode:
Memo.Lines.BeginUpdate;
try
  while not <DS>.Eof do
  begin
      ...
      Memo.Lines.Add(...);
      ...    
      inc(i);
      if i and 15 = 0 then
      begin
        Memo.Lines.EndUpdate;
        try
          Application.ProcessMessages;
        finally
          Memo.Lines.BeginUpdate;
        end;
      end;
      <DS>.Next;
  end;
finally
  Memo.Lines.EndUpdate;
end;
Wobei ich es seitabhängiger lieber hab, da man ja nie weiß, wie schnell der PC ist und wie lange die ganze Verarbeitung dauert.
Delphi-Quellcode:
C := GetTickCount;
Memo.Lines.BeginUpdate;
try
  while not <DS>.Eof do
  begin
      ...
      Memo.Lines.Add(...);
      ...    
      if GetTickCount - C > 150 then // alle 150 ms
      begin
        Memo.Lines.EndUpdate;
        try
          Application.ProcessMessages;
        finally
          Memo.Lines.BeginUpdate;
        end;
        C := GetTickCount;
      end;
      <DS>.Next;
  end;
finally
  Memo.Lines.EndUpdate;
end;

Astat 5. Feb 2010 20:25

Re: Memo hängt sich bei vielen Daten auf
 
Hallo Hansi, bei großen Datenmengen kannst du dies als Turbo verwenden.

Delphi-Quellcode:

 Memo1.Lines.BeginUpdate;
  //-- dazwischen mach was..
 Memo1.Lines.EndUpdate;
Edit: zu spät, oder zuviel Bier?? :drunken:

lg. Astat

Hansi 5. Feb 2010 22:23

Re: Memo hängt sich bei vielen Daten auf
 
Also ich benutze die Word Rechtschreibungsprüfung!

Das liegt aber eher am Schnaps! :)

Gruss an die Runde!


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