![]() |
|
|
![]()
|
|
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
Всем доброго времени суток! Вот пишу программку... сделать простой поиск с точным поиском , скажем я ввел в едит "Привет" и найти это в ЛистБоксе (ЛБ) , я могу... но вышла проблемка. Хочеться круче =) а именно... чтобы скажем я ввел букву "П" и оно мне выдало первый вариант с буквой "П" , ввел "Пр" и выдало первый вариант с буквами "Пр" . Но скажем слово в ЛБ может быть и полностью "Привет", но чтобы поиск искал по запросу букв что в едите но показывал первый возможный вариант.
Дело в том что я как то представляю как это сделать... а вот как перебрать строки в ЛБ не понимаю... |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
Вот так прям себе представил: большой списочек в ListBox, а при вводе буквы в Edit начинается поиск...
ИМХО, просто перебор даст очень не слабую тормознутость. Тут, мне кажется, надо разделять работу на потоки, иначе может получится не очень приятно для пользователя. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
THandle прав: будет жёстко виснуть. Так что, без потока не обойтись.
Кстати, как вариант, можно заюзать ComboBox с Style = csSimple. По-моему, как раз то, что вам нужно. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
|
||||
|
|||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
Ребята... да я уже прикинул как но! ... да я понимаю что там простой стрингс... но как к нему обращаться? Если скажем
for (ListBox1->Items->Strings[i] ; ListBox1->Items->Count-1; i++ ) Так мне что обращаться к нему ListBox1->Items->Strings[i][i] ? Ну первый отвечает за строчку... за строчку в ЛБ. Но и в переменной AnsiString string элемент string[i] отвечает за номер буквы . Так что мне тогда писать? оО ListBox1->Items->Strings[i][i]? Или ListBox1->Items->Strings[i[i]] ? |
|||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
Это что вообще за бред? Strings[i] - это строка!!! Обращаться так к символу...: Kirgston, все таки настоятельно советую поучить язык. А надо чтобы не сносно, а очень даже нормально. Например ситуация. Список в 2-3 тысячи строк и быстро вводить буквы - тормозить будет. |
|||
|
||||
| _Dimon_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 25.6.2007 Где: Украина Репутация: 1 Всего: 1 |
Может стоит заюзать БД для таких целей. У меня база на несколько сотен тисяч записей, контекстный поиск почти моментальный.
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Это не бред - это перебор строк Нужно пробежаться по строкам, а в каждой строке по буквам.
Я задачи-то не знаю. Не будет тормозить, если список разумного размера. А если несколько тысяч строк, то тормозить будет даже когда его заполняешь. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Kirgston, похоже, вы мой пост не читали...
Повторюсь: (не забудьте растянуть ComboBox по высоте). Там как раз реализовано то, что вам нужно. Единственно, вас может не устроить то, что поле для ввода находится прямо над списком. Хотя, кто знает... Добавлено через 3 минуты и 47 секунд Кстати, первая тема из списка ниже. Там решали подобную задачу. В итоге, остановились на этом:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Кстати все это будет нормально работать только на отсортированных списках.
|
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
[яуоте=ТХандле, 11.4.2009, 11:50, пост1839604]Это что вообще за бред? Стрингс[и] - это строка!!![/яуоте]
Да я знаю что это строка =) это я привел кусок видимо не тот =) Списочек будет из 200-300 максимум. Да нет если надо будет оптимизировать это скажем я уже сделаю. Просто был вопрос как работать. Потому что просто не понимал как писать ListBox1->Items->Strings[i][i]? Или ListBox1->Items->Strings[i[i]] ? Язык тут не при чем =) тут больше сама среда. З.Ы. а я книги постоянно читаю =) хм... щас попробую =) надеюсь подойдет. Какой бы нибыл мой цыкл (аля ф-ция) но разработчикам больше доверяю =)
Да если до тысячи дойдет то это уже будет фантастика =) всё в разумных пределах =) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
Ребята помогите пожалуйста ещё с одной проблемкой...
Надо чтобы свич проверял что написано в ЛБ и в соответствии с этим делал "Н" команду... застрял на: switch (PList->Items->Strings[PList->ItemIndex]) пишет: [BCC32 Error] Unit1.cpp(138): E2383 Switch selection expression must be of integral type [BCC32 Error] Unit1.cpp(248): E2096 Illegal structure operation как я понимаю свич работает нормально с чаром, с стрингом уже не хочет. Или что тут не так? Заранее очень благодарен!!! |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |