Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Компоненты и Классы , TListView

Искать текст в 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, демонстрирующий поиск текста в контроле TListView и выбор найденного элемента.

Метод FindCaption используется для поиска элемента с конкретным заголовком, а функция FindListViewItem - для поиска элемента на основе его подэлемента. Процедура LV_FindAndSelectItems является более сложной версией, которая позволяет искать элементы в нескольких столбцах.

Следующий раздел описывает каждый код-набор:

  1. Метод FindCaption:
function FindCaption(StartIndex: Integer; Value: string;
  Partial, Inclusive, Wrap: Boolean): TListItem;

Этот метод ищет элемент с указанным заголовком, начиная с указанного индекса (StartIndex). Параметры Partial, Inclusive и Wrap контролируют поведение поиска.

Пример использования:

var
  lvItem: TListItem;
begin
  lvItem := ListView1.FindCaption(0, '99', True, True, False);
  if lvItem <> nil then
  begin
    ListView1.Selected := lvItem;
    lvItem.MakeVisible(True);
    ListView1.SetFocus;
  end;
end;
  1. Функция FindListViewItem:
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;
  Result := nil;
end;

Эта функция ищет элемент в указанном контроле lv на основе его подэлемента с указанным столбцом (column). Поиск выполняется без учета регистра и только для полного содержимого столбца.

Пример использования:

var
  lvItem: TListItem;
begin
  lvItem := FindListViewItem(ListView1, Edit1.Text, 1);
  if lvItem <> nil then
  begin
    ListView1.Selected := lvItem;
    lvItem.MakeVisible(True);
    ListView1.SetFocus;
  end;
end;
  1. Процедура LV_FindAndSelectItems:
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;

Эта процедура аналогична функции FindListViewItem, но выбирает найденный элемент вместо возвращения его.

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
  lvItem: TListItem;
begin
  LV_FindAndSelectItems(ListView1, Edit1.Text, 1);
  ListView1.SetFocus;
end;

В целом, эти код-наборы демонстрируют поиск текста в контроле TListView с помощью различных методов и выбор найденного элемента. Метод FindCaption используется для поиска элемента с конкретным заголовком, а функция FindListViewItem и процедура LV_FindAndSelectItems - для поиска элементов на основе их подэлементов.

Искать текст в TListView: функции и примеры поиска текста в элементах списка с помощью Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TListView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-14 22:56:14/0.0069148540496826/0