![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Здравствуйте, уважаемые.
Решил сделать "оболочку" для найденного в пространствах интернета словаря в txt-формате и в удачной для обработки структуре. Оболочка простейшая: Edit, ListBox и Memo (потом попробую разобраться с RichEdit, и, если пойму, заменю Memo на него). Но сейчас меня интересует вот какой вопрос: как осуществить при введении слова в Edit "высвечивание" "ближайшего по алфавиту" в ListBox? Пробовал две реализации. Реализация 1: Код:
Код:
Случай 1. Данные в ListBox дополнительно не сортируются по алфавиту Случай 2. Данные в ListBox принудительно сортируются по алфавиту. Сейчас буду пробовать "модернизировать" первую реализацию, введя массив чисел, равных позициям певых; первых двух и первых трёх букв слова, ограничив таким образом "пролистывание" поиска и сократив время "торможения". Собственно, сам вопрос: Как ещё можно сделать поиск по ListBox, чтобы он не тормозил? |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
ListBox1.ItemIndex:=i; и ListBox1Click(Sender); выкинь из цикла. Тогда перерисовки не будет.
Или если нужно с несколькими работать поставь ListBox.Items.BeginUpdate; перед циклом и ListBox.Items.EndUpdate; после.
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Добавил так:
Код:
ListBox1.ItemIndex:=i; и ListBox1Click(Sender); не в цикле. Они после завершения цикла. ListBox1.ItemIndex:=i; выделяет найденное, ListBox1Click(Sender); отображает статью по слову. |
![]() |
![]() |
![]() |
#4 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]()
Не используй компонент для хранения списка строк.
Список должен быть отсортирован. Убрать из цикла то, что можно сделать 1 раз до цикла (AnsiLowerCase). Цикл поиска вытащить в отдельный тред. Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Как это? Создавать каждое обращение к процедуре StringList? Вряд ли будет лучше. А если создать только в FormCreate и сделать его глобальным для программы, то при ошибке не сработает Free для списка, что не хорошо. А по ходу выполнения программы таких возможностей может быть не мало. Подобные вещи я стараюсь избегать.
Почему? Первый вариант работает и с неотсортированным. Но подтормаживает. Попробую, но сомневаюсь, что убирание одного из двух AnsiLowerCase заметно улучшит ситуацию... А больше, вроде, и нечего убирать. Не понял слова "тред"... |
![]() |
![]() |
![]() |
#6 | ||
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
||
![]() |
![]() |
![]() |
#7 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
Цитата:
I'm learning to live...
|
|||
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
![]()
Не совсем получилось
![]() Нет, но как я не могу предусмотреть все возможные события? Каждую процедуру помещать в try..except? Если не сложно, то можно тогда для лучшего понимания попросить пару слов теории, которую не во всех самоучителях найдёшь? 1. Во всех ли случаях у формы выполняется событие OnClose, или в случае каких-нибудь ошибок программа может прерывать выполнение не обращаясь даже к этой функции? 2. Чем критично не освобождение объекта? В случае программного не освобождения выделяемая ему память очищается только при перезагрузке/выключении компьютера? 3. Что "работает" быстрее? StringList или динамический массив строк? А чо, уточняющие вопросы для лучшего понимания ответов задавать на форуме запрещено? Тут надо действовать по принципу "что сказали, то и делай, не думая"? Последний раз редактировалось Ship_1; 08.10.2014 в 10:05. |
![]() |
![]() |
![]() |
#9 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
#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 |