Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzeige des Memos beim bearbeiten unterdrücken? (https://www.delphipraxis.net/61336-anzeige-des-memos-beim-bearbeiten-unterdruecken.html)

moelski 20. Jan 2006 06:22


Anzeige des Memos beim bearbeiten unterdrücken?
 
Moin!

Ich habe mir da ein kleines Tool gebastelt. Damit kann ich Logfiles laden.
Da in diesen LogFiles immer sehr viele unnütze Zeilen sind, habe ich einen kleinen Filter geschrieben, der nach einer bestimmten Zeichenkette sucht und wenn diese vorhanden ist, die Zeile löscht. Das schaut dann so:
Delphi-Quellcode:
procedure TFormLogFilter.Button1Click(Sender: TObject);
Var _i:              Integer;
    _aktuelleZeile:  String;
begin
  for _i := Form1.Memo.Lines.Count downto 0 do begin
    if pos(Edit1.Text, Form1.Memo.Lines.Strings[_i]) > 0 then
      Form1.Memo.Lines.Delete(_i);
    if _i mod 100 = 0 then Application.ProcessMessages;
  end;
end;
Funktioniert ja, aber wenn das Memo sich ständig neu aktualisieren muss, dauert so ein Filter bei ~80000 Zeilen schonmal 3-7 Minuten ...
Deshalb mal 2 Fragen:
1) Gibt es evtl. eine bessere Methode um sowas zu realisieren?
2) Kann ich während der Suche die Änderungen im Memo unterdrücken? Also so das da erstmal nix passiert? Erst zum Schluss dann wieder freigeben und man sieht den "neuen" gefilterten Text.

Luckie 20. Jan 2006 06:38

Re: Anzeige des Memos beim bearbeiten unterdrücken?
 
Vorher:
Delphi-Quellcode:
Memo1.Lines.BeginUpdate;
nachher:
Delphi-Quellcode:
Memo1.Lines.EndUpdate;

moelski 20. Jan 2006 06:51

Re: Anzeige des Memos beim bearbeiten unterdrücken?
 
Danke !

Funzt super.

ste_ett 20. Jan 2006 07:02

Re: Anzeige des Memos beim bearbeiten unterdrücken?
 
Zitat:

Delphi-Quellcode:
procedure TFormLogFilter.Button1Click(Sender: TObject);
Var _i:              Integer;
    _aktuelleZeile:  String;
begin
  for _i := Form1.Memo.Lines.Count downto 0 do begin
    if pos(Edit1.Text, Form1.Memo.Lines.Strings[_i]) > 0 then
      Form1.Memo.Lines.Delete(_i);
    if _i mod 100 = 0 then Application.ProcessMessages;
  end;
end;

Was du da machst, kann schnell zu Fehlern führen. :)
Du veränderst innerhalb der Schleife dein Memo, dadurch ändert sich die Anzahl/Position der Zeilen.
Wenn du eine Zeile löschst, überspringst du die nächste Zeile, da alle Zeilen um eine Zeile aufrücken, du aber durch die Erhöhung von "_i" eine Zeile weiterspringst.

SirThornberry 20. Jan 2006 07:06

Re: Anzeige des Memos beim bearbeiten unterdrücken?
 
@ste_ett: Deine Vermutung ist falsch. Er erhöht den Schleifenzähler nicht sondern arbeitet mit "downto". Somit läuft die schleife rückwärts

moelski 20. Jan 2006 07:45

Re: Anzeige des Memos beim bearbeiten unterdrücken?
 
Moin !

ebend, das läuft rückwärts ab und funktioniert mit Begin/Endupdate jetzt auch angenehm schnell.


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