Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Искать текст в TListView

01.01.2007
// Call FindCaption Method to search for a list view item labeled by the 
// string specified as the Value parameter
 
 
// Syntax:
 
function FindCaption(StartIndex: Integer; Value: string;
 
Partial, Inclusive, Wrap: Boolean): TListItem;
 
 
// Example, Beispiel:
 
procedure TForm1
.Button1Click(Sender: TObject);
var
  lvItem
: TListItem;
begin
  lvItem
:= ListView1.FindCaption(0,      // StartIndex: Integer;
                                 
'99',   // Search string: string;
                                 
True,   // Partial,
                                 
True,   // Inclusive
                                 
False); // Wrap  : boolean;
 
if lvItem <> nil then
 
begin
    ListView1
.Selected := lvItem;
    lvItem
.MakeVisible(True);
    ListView1
.SetFocus;
 
end;
end;
 
 
// To search for a list view subitem (also for items), use this function:
 
{
 
Search for text in a listview item
 
@Param lv is the listview, supposed to be in vaReport mode
 
@Param S is the text to search for
 
@Param column is the column index for the column to search , 0-based
 
@Returns the found listview item, or Nil if none was found
 
@Precondition  lv  nil, lv in report mode if column  0, S not empty
 
@Desc The search is case-insensitive and will only match on the
  complete column content
. Use AnsiContainsText instead of AnsiCompareText
  to match on a substring
in the columns content.
 
Created 14.10.2001 by P. Below
}
 
function FindListViewItem(lv: TListView; const S: string; column: Integer): TListItem;
var
  i
: Integer;
  found
: Boolean;
begin
 
Assert(Assigned(lv));
 
Assert((lv.viewstyle = vsReport) or (column = 0));
 
Assert(S <> '');
 
for i := 0 to lv.Items.Count - 1 do
 
begin
   
Result := lv.Items[i];
   
if column = 0 then
      found
:= AnsiCompareText(Result.Caption, S) = 0
   
else if column > 0 then
      found
:= AnsiCompareText(Result.SubItems[column - 1], S) = 0
   
else
      found
:= False;
   
if found then
     
Exit;
 
end;
 
// No hit if we get here
 
Result := nil;
end;
 
// Example call:
 
procedure TForm1
.Button1Click(Sender: TObject);
var
  lvItem
: TListItem;
begin
 
// Search subitem[0] for text from edit1
 
// in der Spalte subitem[0] den Text aus Edit1 suchen
  lvItem
:= FindListViewItem(ListView1, Edit1.Text, 1);
 
// if found, then show the item
 
// falls item gefunden, dann anzeigen
 
if lvItem <> nil then
 
begin
    ListView1
.Selected := lvItem;
    lvItem
.MakeVisible(True);
    ListView1
.SetFocus;
 
end;
end;
 
 
// Function to search items and select if found
 
procedure LV_FindAndSelectItems
(lv: TListView; const S: string; column: Integer);
var
  i
: Integer;
  found
: Boolean;
  lvItem
: TListItem;
begin
 
Assert(Assigned(lv));
 
Assert((lv.ViewStyle = vsReport) or (column = 0));
 
Assert(S <> '');
 
for i := 0 to lv.Items.Count - 1 do
 
begin
    lvItem
:= lv.Items[i];
   
if column = 0 then
      found
:= AnsiCompareText(lvItem.Caption, S) = 0
   
else if column > 0 then
   
begin
     
if lvItem.SubItems.Count >= Column then
        found
:= AnsiCompareText(lvItem.SubItems[column - 1], S) = 0
     
else  
        found
:= False;
   
end
   
else
      found
:= False;
   
if found then
   
begin
      lv
.Selected := lvItem;
   
end;
 
end;
end;
 
procedure TForm1
.Button1Click(Sender: TObject);
var
  lvItem
: TListItem;
begin
 
// in der Spalte subitem[0] den Text aus Edit1 suchen
  LV_FindAndSelectItems
(ListView1, Edit1.Text, 1);
  ListView1
.SetFocus;
end;
 

https://delphiworld.narod.ru/

DelphiWorld 6.0