Oder einfach die Klasse etwas erweitern:
Delphi-Quellcode:
TExStringList = class(TStringList)
constructor Create;
destructor Destroy; override;
private
fLastMatch: integer;
fSearchKey: string;
public
function FindFirst(aValue: string): integer;
function FindNext: integer;
end;
implementation
{ TexStringList }
constructor TExStringList.Create;
begin
fLastMatch := -1;
inherited;
end;
destructor TExStringList.Destroy;
begin
inherited;
end;
function TExStringList.FindFirst(aValue: string): integer;
begin
fSearchKey := aValue;
fLastMatch := IndexOf(fSearchKey);
Result := fLastMatch;
end;
function TExStringList.FindNext: integer;
var
ndx: integer;
begin
Result := -1;
for ndx := Succ(fLastMatch) to Pred(GetCount) do
begin
if CompareStrings(Get(ndx), fSearchKey) = 0 then
begin
fLastMatch := ndx;
Result := fLastMatch;
Exit;
end;
end;
end;
Und dann zum Beispiel so verwenden:
Delphi-Quellcode:
procedure TDemoForm.btn_Button1Click(Sender: TObject);
var
sl: TExStringList;
findindex: integer;
begin
sl := TexStringList.Create;
try
sl.Add('blubb');
sl.Add('meow');
sl.Add('blubb');
sl.Add('blubb');
sl.Add('meow');
sl.Add('blubb');
lb_ListBox1.Clear; // Zum Test gebe ich den Index in einer TListBox aus.
findindex := sl.FindFirst('blubb');
while findindex > -1 do
begin
lb_ListBox1.Items.Add(IntToStr(findindex));
findindex := sl.FindNext;
end;
finally
sl.Free;
end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"