Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#6

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 16:05
Ich hab das ganze mal etwas umgeschrieben um es allgemeiner anwenden zu können (ungetestet da Delphi nicht offen)

Delphi-Quellcode:
type
  TProgressEvent = procedure(aWorkPos, aWorkMax, aResultsFound: integer) of object;

procedure SearchFunc(const aTarget, aRipping: TStrings; SearchStr: string;
                     CaseSensitive: boolean; aCallBackEvent: TProgressEvent);
var i : integer;
    iTexPos : integer;

    iWorkPos, iWorkMax : integer;
    iResultsFound : integer;
    sCurrentLine : string;
begin
  // Ergebnis leeren und Variablen initialisieren
  aTarget.Clear;
  iWorkMax := aRipping.Count;
  iResultsFound := 0;
  
  for i := 0 to aRipping.Count-1 do
  begin
    sCurrentLine := aRipping[i];
    if CaseSensitive then
       iTexPos := Pos(SearchStr, sCurrentLine)
    else
       iTexPos := Pos(AnsiLowerCase(SearchStr), AnsiLowerCase(sCurrentLine));
    
    // falls der Such-String gefunden wurde
    if iTexPos > 0 then
    begin
      // Ergebniss in Liste hinzufügen und Zähler erhöhen
      aTarget.Add(sCurrentLine);
      inc(iResultsFound);
    end;

    // Aktuelle Position (+1 da Zeile schon durchsucht)
    iWorkPos := i + 1;

    // Call-Back-Event auslösen
    if Assigned(aCallBackEvent) then
       aCallBackEvent(iWorkPos, iWorkMax, iResultsFound);
  end;
end;
Aufruf:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    procedure SearchCallBack(aWorkPos, aWorkMax, aResultsFound: integer);
    
  end;

implementation

{ .... }
  
procedure TForm1.SearchCallBack(aWorkPos, aWorkMax, aResultsFound: integer);
begin
  lbPercentDone.Caption := FloatToStrF(aWorkPos / aWorkMax * 100, ffNumber, 8, 0)+'%';
  lbResultsFound.Caption := IntToStr(aResultsFound);
  Application.ProcessMessages;
end;

procedure TForm1.StartSearch;
begin
  SearchFunc(ErgebnissMemo.Lines, SuchMemo.Lines, SuchEdit.Text,
             CaseSensitiveCheckBox.Checked, SearchCallBack);
end;
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat