Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Искать текст в TListView

Заходит как то программист в комп.магазин долго ходил смотрел всё высматривал потом подходит к продавщице и просит посмотреть каталог, потом минуту спустя спрашивает:
- Извинити это у вас цены или номера ICQ???


// 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;

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay