|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.10.2014, 13:22 | #1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Реализация "следящего" поиска для словаря
Здравствуйте, уважаемые.
Решил сделать "оболочку" для найденного в пространствах интернета словаря в txt-формате и в удачной для обработки структуре. Оболочка простейшая: Edit, ListBox и Memo (потом попробую разобраться с RichEdit, и, если пойму, заменю Memo на него). Но сейчас меня интересует вот какой вопрос: как осуществить при введении слова в Edit "высвечивание" "ближайшего по алфавиту" в ListBox? Пробовал две реализации. Реализация 1: Код:
Код:
Случай 1. Данные в ListBox дополнительно не сортируются по алфавиту Случай 2. Данные в ListBox принудительно сортируются по алфавиту. Сейчас буду пробовать "модернизировать" первую реализацию, введя массив чисел, равных позициям певых; первых двух и первых трёх букв слова, ограничив таким образом "пролистывание" поиска и сократив время "торможения". Собственно, сам вопрос: Как ещё можно сделать поиск по ListBox, чтобы он не тормозил? |
07.10.2014, 13:47 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
ListBox1.ItemIndex:=i; и ListBox1Click(Sender); выкинь из цикла. Тогда перерисовки не будет.
Или если нужно с несколькими работать поставь ListBox.Items.BeginUpdate; перед циклом и ListBox.Items.EndUpdate; после.
I'm learning to live...
|
07.10.2014, 14:13 | #3 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Добавил так:
Код:
ListBox1.ItemIndex:=i; и ListBox1Click(Sender); не в цикле. Они после завершения цикла. ListBox1.ItemIndex:=i; выделяет найденное, ListBox1Click(Sender); отображает статью по слову. |
07.10.2014, 17:00 | #4 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Не используй компонент для хранения списка строк.
Список должен быть отсортирован. Убрать из цикла то, что можно сделать 1 раз до цикла (AnsiLowerCase). Цикл поиска вытащить в отдельный тред. Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
07.10.2014, 19:45 | #5 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Как это? Создавать каждое обращение к процедуре StringList? Вряд ли будет лучше. А если создать только в FormCreate и сделать его глобальным для программы, то при ошибке не сработает Free для списка, что не хорошо. А по ходу выполнения программы таких возможностей может быть не мало. Подобные вещи я стараюсь избегать.
Почему? Первый вариант работает и с неотсортированным. Но подтормаживает. Попробую, но сомневаюсь, что убирание одного из двух AnsiLowerCase заметно улучшит ситуацию... А больше, вроде, и нечего убирать. Не понял слова "тред"... |
07.10.2014, 20:16 | #6 | ||
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
||
07.10.2014, 20:38 | #7 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
Цитата:
I'm learning to live...
|
|||
08.10.2014, 09:57 | #8 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Не совсем получилось Я знаю, что это визуализация StringList, но не имею представления на сколько тяжёлая.
Нет, но как я не могу предусмотреть все возможные события? Каждую процедуру помещать в try..except? Если не сложно, то можно тогда для лучшего понимания попросить пару слов теории, которую не во всех самоучителях найдёшь? 1. Во всех ли случаях у формы выполняется событие OnClose, или в случае каких-нибудь ошибок программа может прерывать выполнение не обращаясь даже к этой функции? 2. Чем критично не освобождение объекта? В случае программного не освобождения выделяемая ему память очищается только при перезагрузке/выключении компьютера? 3. Что "работает" быстрее? StringList или динамический массив строк? А чо, уточняющие вопросы для лучшего понимания ответов задавать на форуме запрещено? Тут надо действовать по принципу "что сказали, то и делай, не думая"? Последний раз редактировалось Ship_1; 08.10.2014 в 10:05. |
08.10.2014, 10:09 | #9 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
08.10.2014, 10:30 | #10 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" | Alexsandrr | Microsoft Office Excel | 4 | 19.10.2013 14:22 |
Реализация алгоритма "Решето Сундарама" для поиска простых чисел(Delphi) | inviter | Помощь студентам | 0 | 12.11.2012 17:15 |
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") | funnyy | Помощь студентам | 3 | 17.10.2012 17:40 |
как задать "мерность" масива и для каждого "измерения" максимальный индекс | vova_ | Общие вопросы Delphi | 5 | 31.07.2012 22:14 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |