Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
Delphi 7 Professional
|
Re: Memo Durchsuchen & Fortschritsanzeige
18. Jun 2008, 17: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
|
|
Zitat
|