Re: How to perform ListBox search?
Posted by webmaster Guido on November 18, 2000 at 17:09:40:
In Reply to: How to perform ListBox search? posted by Weirghn Ingrad on November 16, 2000 at 20:40:47:
: How to perform String search in List Box?
As I understand it, you are not searching for the first or next item that _begins_ with a search string, but that _contains_ that string.
When a new string is entered in the Editbox "Ed", let's search for the first occurrence. Otherwise, we search for the next occurrence. Let's also search in a "circular" way, meaning: when at the last item of the listbox "LB", wrap around to the beginning of the listbox. Let's suppose also that the search is not case sensitive.
The previous search-string is stored in a global variable. At the beginning of the implementation section, right before the first routine, you write:
var OldSearch: string;
At the first search, right after starting the program, OldSearch must be empty (the first search always starts at the top of the listbox). We also position the listbox at the first item:
procedure TForm1.FormCreate(Sender: TObject); begin OldSearch := ''; LB.ItemIndex := 0; end;
The search procedure:
procedure TForm1.Button1Click; var SearchFor: string; StartAt, i: integer; Found: Boolean; begin SearchFor := LowerCase(Ed.Text); if (SearchFor <> OldSearch) then StartAt := 0 else StartAt := LB.ItemIndex; i := StartAt; if (SearchFor <> OldSearch) then Found := Pos(SearchFor, LowerCase(LB.Items[i])) > 0 else Found := False; while not Found do begin inc(i); // next item // wrap around if needed if i > LB.Items.Count - 1 then i := 0; Found := Pos(SearchFor, LowerCase(LB.Items[i])) > 0; if i = StartAt then break; end; if Found then LB.ItemIndex := i; OldSearch := SearchFor; end;