Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Вниз

TListView и OnCustomDrawItem   Найти похожие ветки 

 
serhiyiv ©   (2010-01-15 22:10) [0]

Здравствуйте. Подскажите пожалуйста как решить следующую проблему:
в событие TListView-а OnCustomDrawItem рисую

if odd (Item.Index) then begin
ImageList1.Draw(ListView1.Canvas,Rect.Left,Rect.Top,0);
end else begin
ImageList1.Draw(ListView1.Canvas,Rect.Left,Rect.Top,1);

при малом количестве айтемов все нормально, но как только их 1000+ то при прокрутке чуть ниже половины все начинает тормозить, и чем ближе к концу, тем больше тормозит.

А если использовать какие то более сложные функции что б получить номер иконки из TImageList или из другово источника, то тормозит даже при небольшом количестве айтемов.

В чем может быть проблема? Ето TListView такой тормоз или нужно както по другому прописывать. Просто есть пример с рисованием айтемов но на другом компоненте (не наследнике TListView), где в "OnCustomDrawItem" (у него там свой) исполняеться много разных функций и все работает без тормозов.

Так вот, нужно много рисовать, но подскажите какие тонкости или особености TListView нуждно учесть?
Хотя б как заставить TListView выполнить такой простой пример, как я навел выше?


 
DVM ©   (2010-01-16 11:42) [1]


> serhiyiv ©

Используй виртуальный режим. В этом режиме ListView не хранит данные, а берет их из внешнего источника. ListView-у надо лишь сообщить количество элементов. Как показывает практика в этом режиме все работает намного быстрее. Собственно скорость ограничена лишь скоростью взятия нужного элемента из внешнего списка. 100 000 элементов - тормозов нет абсолютно.


 
serhiyiv ©   (2010-01-16 13:58) [2]

Ну если закинуть 2000+ айтемов в стандартном режиме (не виртуальном) то все и так нормально работает (компонент сам рисует иконки из TImageList). Ну а если рисовать самому, и при етом в OnCustomDrawItem поместить еще какие то вычисления, типа, положение айтема и тд. то тормозит. И деже при не большом количистве (100 атемов) если производить некоторые болеее сложные вычисления то все ужасно тормозит. В примере который я нашел использеуться другой компонент, и там при отрисовке происходит: вычисление размеров айтема, проверка имееться ли такая каринка в record, такой у нее размер ччто нужен или нет, если нет то создаеться bitmap jpegimage и там создаеться картинка и запихаеться в record. Но там все отлично работает. Уже пробовал узнавать через сообщение LVM_ISITEMVISIBLE если атем виден то рисовать его, но все так само: при прокрутке дальше средины все начинает тормозить и чем ближе к концу тем больше. Так ето особенности TListView или не правильно прописан код? Помогите пожалуйста разобраться. Вот к примеру в WindowsMediPlayer отображаються альбомы и обложки песен да еще и звездочки и т.п. и все каботает, а тут прорисовать пару картинок нормально не получаеться?


 
DVM ©   (2010-01-16 14:05) [3]


> Уже пробовал узнавать через сообщение LVM_ISITEMVISIBLE
> если атем виден то рисовать его

это и так автоматические делается


> Ну а если рисовать самому, и при етом в OnCustomDrawItem
> поместить еще какие то вычисления, типа, положение айтема
> и тд. то тормозит

погоди, так код указанный в [0] это не все что ли? Давай полностью обработчик.


 
DVM ©   (2010-01-16 14:26) [4]


> serhiyiv ©

стати в режиме vsReport не тормозит, тормозит в режиме vsIcon



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
1-1244700380
leonidus
2009-06-11 10:06
2010.03.21
Окно распахивающееся с анимацией


2-1263977765
Неважно
2010-01-20 11:56
2010.03.21
CriticalSection


15-1262035823
Юрий
2009-12-29 00:30
2010.03.21
С днем рождения ! 29 декабря 2009 вторник


15-1262280863
Kerk
2009-12-31 20:34
2010.03.21
А где можно сделать онлайн плейлист и слушать?


2-1263838589
mpdasa
2010-01-18 21:16
2010.03.21
как написать: если A>2 и А<5 тогда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский