Der Code von Achtzig mit Pos ist hier eigentlich das Richtige für das Problem, man könnte ihn noch anpassen, um ihn case insensitive (also unabhängig von Groß- und Kleinschreibung) zu machen. So z.B. :
Code: Alles auswählen
uses {...,} LazUTF8;
procedure BibSuche(pSuchWort: TCaption; pSucheIn: TListView; pErgebnisse: TStrings; pCaseSens: Boolean = False);
var
i,a: Integer;
SuchWort: String;
begin
if not pCaseSens then //Suche die Groß- und Kleinschreibung nicht beachtet
begin
SuchWort := UTF8UpperCase( pSuchWort );
for i := 0 to pSucheIn.Items.Count-1 do
begin
if Pos(SuchWort,UTF8UpperCase(pSucheIn.Items[i].Caption))>0 then pErgebnisse.Add(pSucheIn.Items[i].Caption);
for a := 0 to pSucheIn.Items[i].SubItems.Count-1 do
if Pos(SuchWort,UTF8UpperCase(pSucheIn.Items[i].SubItems[a]))>0 then
pErgebnisse.Add(pSucheIn.Items[i].SubItems[a]);
end;
end
else //Suche die Groß- und Kleinschreibung beachtet
begin
SuchWort := pSuchWort;
for i := 0 to pSucheIn.Items.Count-1 do
begin
if Pos(SuchWort,pSucheIn.Items[i].Caption)>0 then pErgebnisse.Add(pSucheIn.Items[i].Caption);
for a := 0 to pSucheIn.Items[i].SubItems.Count-1 do
if Pos(SuchWort,pSucheIn.Items[i].SubItems[a])>0 then pErgebnisse.Add(pSucheIn.Items[i].SubItems[a]);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject); // Aufruf der Prozedur über einen Button
begin
BibSuche(Edt_Suchen.Text,ListView_Buchuebersicht,Form_gefunden.Memo_gefunden.lines); //-> Case Insensitive
Form_gefunden.Memo_gefunden.lines.Add('');
BibSuche(Edt_Suchen.Text,ListView_Buchuebersicht,Form_gefunden.Memo_gefunden.lines,True); // -> Case Sensitive
end;
[Edit] UpperCase durch UTF8UpperCase ersetzt
Weiter könnte man die Suche auf ganze Worte einschränken...
Mfg