|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.12.2014, 09:53 | #1 |
Форумчанин
Регистрация: 13.04.2013
Сообщений: 180
|
Чем можно заменить или как ускорить TImageList?
Приветствую!
Задача следующая - загружать из файла в ListView (три колонки) большущий список строк, порядка 40-50К, а то и больше. Конечно, это занимало много времени, поэтому решил проблему переводом ListView в виртуальный режим. Теперь всё ОК, даже миллион строк грузится буквально за секунду. С ListView разобрался, но вот незадача - к каждой строке еще нужно прицепить по иконке. Вот как этот процесс оптимизировать? Ведь ListView берет иконки из TImageList (кстати, можно ли из другого места брать, подскажите?). А чтобы заполнить этот TImageList 40-50К картинок (гружу их из папки), опять же, нужно много времени. Если подгружать в TImageList иконки по мере прокрутки ListView, т.е. на событие ListView1.OnData добавить ImageList1.Add(bm, nil), тогда всё хорошо, но стоит резко крутануть скролл вниз - и тут же иконки пропадают, так как предыдущие индексы еще не заполнились. Пробовал вешать на кнопку "Загрузить список из файла" цикл в котором TImageList предварительно заполняется Nil'ами в цикле: Код:
А затем при необходимости заменять нужный индекс нужной картинкой: Код:
Как можно оптимизировать это всё и ускорить? Например, можно ли как-то изначально задать количество элементов в TImageList, не заполняя его nil'ами в цикле? Или как-то избавиться от тормозного TImageList и заменить его чем-то? Очень надеюсь на дельные советы. Заранее спасибо! |
06.12.2014, 13:09 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Куча событий CustomDraw. Там тоже картинки можно прорисовывать без всякого ImageList
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
06.12.2014, 13:21 | #3 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
06.12.2014, 13:28 | #4 |
Форумчанин Подтвердите свой е-майл
Регистрация: 01.12.2006
Сообщений: 514
|
а нужно ли грузить весь список из 40-50к записей?
человеку думаю будет сложно обработать этот набор данных может лучше выдавать порциями, фильтровать или подгружать динамически?
Пишу на Delphi за еду
|
06.12.2014, 13:38 | #5 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Не совсе понятна идея. Если идти от эргономики, 7-8 записей - за глаза. Если их больше, необходими разработать определённый критерий выдачи. Каков он будет? То мне не ведмо. Всё на усмитрение автора.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
06.12.2014, 13:44 | #6 |
Форумчанин
Регистрация: 13.04.2013
Сообщений: 180
|
|
06.12.2014, 13:58 | #7 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Какой максимальный размер картнки? Там есть ограничения, 64х64. Еслт будет больше, она урежитсяся с левого верхнего пикселя.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
06.12.2014, 14:05 | #8 |
Форумчанин
Регистрация: 13.04.2013
Сообщений: 180
|
|
06.12.2014, 14:17 | #9 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Приведи их все к формату 64х64 и будет тебе счастье.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
06.12.2014, 14:30 | #10 |
Форумчанин
Регистрация: 13.04.2013
Сообщений: 180
|
Вобщем проблему решил еще проще) Поменял значение ImageList.AllocBy на 1000 и всё стало загружаться моментально) Всем спасибо, тема больше не актуальна!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чем можно заменить свойство PageSetup.FirstPageNumber в старом EXELе? | vpm | Microsoft Office Excel | 0 | 14.11.2012 18:34 |
Как можно ускорить скорость макроса? | staniiislav | Microsoft Office Excel | 7 | 21.12.2011 09:44 |
Чем можно заменить компоненты Indy? | Arsenx777 | Работа с сетью в Delphi | 7 | 29.07.2011 04:35 |
Чем можно заменить конструкцию? Или как быть ? | kitovras | Microsoft Office Excel | 3 | 12.08.2009 15:31 |
Чем можно заменить объект BitBtn? | frai | Компоненты Delphi | 3 | 14.04.2007 12:42 |