Такой вопрос: как организовать поиск в ListBox? Нужно также, как и в Блокноте - Найти и Найти далее. На форме кнопка Найти, Edit1, в котором я ввожу, то что надо найти, и сам ListBox1. И когда я жму Найти, должна выделиться строка, в которой присутствуют слова, введенные Edit1. Мне нужно частичное совпадение.
Мне подсказали вот что:
var
Form1: TForm1;
n : byte;
...............
procedure TForm1.BtnFindClick(Sender: TObject);
var
i: byte;
flag: boolean;
begin
i:=0;
flag:=false;
repeat
if Pos(LowerCase(Edit1.Text),LowerCase(ListBox1.Items.Strings[i]))<>0 then
begin
Listbox1.Selected[i]:=true;
n:=i;
flag:=true;
end;
inc(i);
until (i=ListBox1.Count-1) or (flag=true);
end;
procedure TForm1.BtnFindNextClick(Sender: TObject);
var
i : byte;
begin
for i:=n+1 to ListBox1.Count-1 do
begin
if Pos(LowerCase(Edit1.Text),LowerCase(ListBox1.Items.Strings[i]))<>0 then
begin
Listbox1.Selected[i]:=true;
n:=i;
break;
end;
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
ListBox1.Perform(LB_SELECTSTRING,-1,longint(Pchar(Edit1.text)));
end;
Это значит, что если, к примеру, у тебя есть элемент с названием "Rambler", то ты можешь ввести в строке
поиска "ler" и программа выделит этот элемент.
kodov,
не знаю уж чего у тебя там
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
flag: boolean;
dnCase: string;
begin
i := n; flag := false;
dnCase := LowerCase(Edit1.Text); // Сокращаем работу - не делать же ЭТО в цикле
repeat
if Pos(dnCase, LowerCase(ListBox1.Items.Strings[i])) > 0 then begin
Listbox1.Selected[i] := true;
n := i;
flag := true;
end
else inc(i);
// Заметь, НЕ до (Count - 1), иначе ты просто никогда последний элемент не найдешь
until (i = ListBox1.Count) or flag;
end;