Und Du wirst schon 2 Stringlisten brauchen, wenn Du nicht nach jedem Verkleinern des Filters alles neu abrufen willst. Ich denke da an so etwas (Sir Rufos Vorschlag gleich mit übernommen):
Delphi-Quellcode:
procedure FilterItems(const SrcList, DestList: TStrings; const substr: array of string);
var
Line, SearchwordIndex: integer;
Containing: Boolean;
begin
Assert(Assigned(SrcList), 'Keine gültige Quellliste');
Assert(Assigned(DestList), 'Keine gültige Zielliste');
DestList.BeginUpdate;
try
DestList.Clear;
for Line := 0 to SrcList.Count - 1 do
begin
Containing := true;
for SearchwordIndex := Low(substr) to High(substr) do
if not AnsiContainsText(SrcList[Line], substr[SearchwordIndex]) then
begin
Containing := false;
break;
end;
if Containing then
DestList.Add(SrcList[Line]);
end;
finally
DestList.EndUpdate;
end;
end;
Ungetestet, hat bestimmt auch noch Optimierungspotential, sollte aber funktionieren.