2004. március 7., vasárnap

Search for text in a TListView item


Problem/Question/Abstract:

How to search for text in a TListView item

Answer:

Parameters:

lv:
The listview, supposed to be in vaReport mode

S:
The text to search for

Column:
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

Description:
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.

function FindListviewItem(lv: TListview; const S: string; column: Integer): TListItem;
var
  i: Integer;
  found: Boolean;
begin
  Assert(Assigned(lv));
  Assert((lv.viewstyle = vaReport) 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 <= result.subitems.count 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;

Nincsenek megjegyzések:

Megjegyzés küldése