Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Быстрый поиск по ListBox


Автор: Pakshin A. S. 9.2.2004, 21:50
Сталкнулся с проблемой: поиск строки по ListBox'у слишком долгий и не отвечает требованиям к программе! Как ускориться? Может есть какая-нибудь мысль...

Автор: <Spawn> 9.2.2004, 22:24
Покажи код

Автор: Yanis 9.2.2004, 22:58
А кода то инет smile.gif
Скорее всего алгоритм самодельный вот и медленно.

Автор: p0s0l 9.2.2004, 23:33
Может он делал через ListBox1.Items.IndexOf('findme') ?

Автор: Yanis 10.2.2004, 00:10
Да кто его знает. Молчит как партизан.

Автор: mmv 10.2.2004, 00:45
кстати, а почему вот такая штука для листбокса не работает?
Код
With ListBox1 Do Perform(CB_SELECTSTRING, -1, Integer(PChar(Edit1.Text)));


Автор: Medved 10.2.2004, 07:29
Модератор: 2mmv один топик - один вопрос.

Читайте http://forum.vingrad.ru/index.php?act=SR&f=27

Автор: -=::BlackCat::=- 10.2.2004, 20:47
оно одно к другому относится
--
слово Integer там зачем?

Автор: mmv 11.2.2004, 17:31
Цитата
Модератор: 2mmv один топик - один вопрос.

Я всего лишь попытался решить поставленный рakshin A. S. вопрос. Правда, не совсем удачно. А правила я читал. Когда регистрировался.
Цитата
слово Integer там зачем?

В хелпе указано: function Perform(Msg: Cardinal; WParam, LParam: Longint): Longint; Integer - для соответствия типов. Ведь без этого получается PChar. Вообще-то код замечательно работает ComboBox. Логично было предположить, что и с ListBox будет аналогично. А автор исходного кода - не я. Это ответ на вопрос с форума на "исходниках"

Автор: Pakshin A. S. 11.2.2004, 19:44
Данные штуковины я знаю...
Мне надо выполнит, например, поиск строки содержащей какое-нибудь сочетание символов!

Сейчас работаю через цикл... Цикл этот пока прост, но мне егопредстоит усложнять, поэтому я думаю, что вся эта потеха будет очень долго работать...

Проведу пример:
ListBox:
Цитата

asdg
fghjsd
uiop
ghsf


Поиск символа 'd'

Первый клик по кнопке -> выделяется первая срока
Второй клик по кнопке -> выделяется вторая строка

Что-то в этом духе!

Автор: -=::BlackCat::=- 12.2.2004, 18:14
mmv

Код
procedure TSearch.editChange(Sender: TObject);
begin
Form.ListBox.Perform(LB_SELECTSTRING,-1,longint(Pchar(edit.Text)));
end;


вот это у меня в програме весело и очень деже не плохо работало

Автор: Pakshin A. S. 12.2.2004, 18:46
-=::BlackCat::=- Работает, если надо строку целиком!

Автор: mmv 13.2.2004, 03:04
-=::BlackCat::=-

Да и у меня работает... Но ведь то же самое писал - не шло... Странно. Глуповато как-то вышло...

Автор: Pakshin A. S. 13.2.2004, 20:41
А на мой вопрос ответ есть ?! biggrin.gif

Автор: <Spawn> 13.2.2004, 22:22
Дак ты покажи свой цикл, а мы посмотрим можно ли его оптимизировать. Или тебя интересуют алгоритмы поиска подстроки в строке? Если так, то я думаю в инете примеров полно должно быть.

Автор: Pakshin A. S. 14.2.2004, 21:20
Код

i:=0;
b:=false;
while (not b) and (i <=ListBox1.items.Count -1) do
begin
 if StrPos(ListBox1.Items[i], SomeTxt) <> nil
   then
   begin
    {Вставляю ещё критерии для выбора}
    ListBox1.Itemindex:=i;
    b:=true;
   end;
 inc(i);
end;


Что-то в этом духе...

Автор: In0stRAnez 18.6.2012, 20:49
Привет всем!, использую метод Form.ListBox.Perform(LB_SELECTSTRING,-1,longint(Pchar(edit.Text)));
проблема в том что ищу в листбоксе [ITEM1] а находит [ITEM4] только после двойного нажатия показывает...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)