Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.12.14;
Скачать: CL | DM;

Вниз

динамический листвью..   Найти похожие ветки 

 
istok20 ©   (2012-02-09 22:11) [0]

1.есть ли примеры динамического листвью? а то отображение тысяч айтемов сразу идёт слишком долго. т.е. чтоб подгружал айтемы по мере прокрутки. кол-во айтемов мне заранее известно. более того, все необходимые данные есть в объектной модели. но надо использовать именно listview. (была б возможность, исопльзовал бы virtualtree)

begin\end update разумеется используются.

2.можно ли ускорить такой код - освобождение объектов..?
   for i := 0 to AListView.Items.Count - 1 do
     if AListView.Items[i].Data <> nil then
       Dispose(AListView.Items[i].Data);

clear его не сделает, проверял)


 
Сергей М. ©   (2012-02-09 22:37) [1]

F1 + OwnerData


 
istok20 ©   (2012-02-10 00:07) [2]

спасибо. вещь.

один вопрос - если я пробегусь по всем айтемам листвью в цикле, то тем самым вызову у всех OnData ? т.е. лучше избегать такого кода... ?)


 
istok20 ©   (2012-02-10 00:11) [3]

уже проверил, что да... а как бегать только по заполненным айтемам? или листвью их после прокрутки сам освобождает?


 
istok20 ©   (2012-02-10 00:21) [4]

т.е. я в Data  айтемов пихаю кое-что и хочу правильно освобождать..


 
istok20 ©   (2012-02-10 02:58) [5]

указатели из data параллельно стал записывать в tlist и после через него очищать... - нормальное решение чтобы избегать потери указателей data при ownerdata?


 
DVM ©   (2012-02-10 16:42) [6]


> istok20 ©   (10.02.12 02:58) [5]
> указатели из data параллельно стал записывать в tlist и
> после через него очищать... - нормальное решение чтобы избегать
> потери указателей data при ownerdata?

Что значит параллельно? Все данные лежат в ТВОЕМ списке, в ListView в виртуальном режиме хранится только общее количество элементов и текущая позиция, которую он отображает. Отображая элементы он запрашивает данные у тебя, сам он ничего не хранит.


 
istok20 ©   (2012-02-10 21:07) [7]

это я понял, просто раньше хранил кое-что в Item.Data, а теперь  тоже туда пишу, но дабы не было утечки, освобождаю эти объекты (на которые указывает Data) из другого места (отдельный TList)

просто мне до конца непонятно как и сколько живут Item"ы при OwnerData..

и еще хотелось бы понять как лучше всего рефрешить листвью (щас юзю Refresh, но он мерцает))  и как правильно выставлять скроллер в начало списка.. (послать ему соответствующий windows message или лучше через FocusedItem (если не ошибаюсь) есть другие варианты?)


 
sniknik ©   (2012-02-10 21:40) [8]

> в Item.Data, а теперь  тоже туда пишу
каким это образом? и зачем? данные у тебя, итемсов НЕТ, он только через события у тебя запрашивает что отображать... если не установлено конечно еще и OwnerDraw.


 
sniknik ©   (2012-02-10 21:41) [9]

> как и сколько живут Item"ы при OwnerData..
вообще не живут. "мертворожденные".


 
DVM ©   (2012-02-10 22:44) [10]


> istok20 ©   (10.02.12 21:07) [7]
> это я понял, просто раньше хранил кое-что в Item.Data, а
> теперь  тоже туда пишу, но дабы не было утечки, освобождаю
> эти объекты (на которые указывает Data) из другого места
> (отдельный TList)

У тебя есть список, в нем и храни, а так как ты описываешь ты дискредитируешь своими действиями весь подход к виртуальным спискам.


> и еще хотелось бы понять как лучше всего рефрешить листвью
> (щас юзю Refresh, но он мерцает))  и как правильно выставлять
> скроллер в начало списка..

INVALIDATE + DOUBLEBUFERED ничего не мерцает.


> и как правильно выставлять скроллер в начало списка..

У ListView есть методы ими и выставляй.


 
istok20 ©   (2012-02-11 18:33) [11]


> INVALIDATE + DOUBLEBUFERED ничего не мерцает.


выставил, но если обновляется один subitem каждого айтема, то мерцает. это решаемо?


 
istok20 ©   (2012-02-11 18:36) [12]


> У тебя есть список, в нем и храни, а так как ты описываешь
> ты дискредитируешь своими действиями весь подход к виртуальным
> спискам.


т.е. Data вообще низя юзить при OwnerData (чтоб всунуть туда указатель на структуру которая живёт в отдельном TList и ессно освобождается извне а не через item.data) или как?  по факту вроде ок работает и утечек нет..


 
sniknik ©   (2012-02-11 18:52) [13]

> т.е. Data вообще низя юзить при OwnerData
можно, раз настаиваешь, можно вообще все... но какой тогда смысл?
смысл сего в
> данные у тебя, итемсов НЕТ
а не, в  
данные у тебя, + копия в итемсах.
будет не облегчение, а глупое дублирование.


 
istok20 ©   (2012-02-11 19:04) [14]


> будет не облегчение, а глупое дублирование.


аа.. проверил.. точно дубляж идет... всё понял.... затупил, сорри)


 
DVM ©   (2012-02-11 19:43) [15]


> istok20 ©   (11.02.12 18:33) [11]
>
> > INVALIDATE + DOUBLEBUFERED ничего не мерцает.
>
>
> выставил, но если обновляется один subitem каждого айтема,
>  то мерцает. это решаемо?

c DoubleBuffered не может оно мерцать, не везде включил буферизацию значит.
Тут еще важно, не перерисовывать ListView после обновления каждой фитюльки, если их обновляется много за раз. Обновляй после изменения данных в списке для всех элементов разом.


 
DVM ©   (2012-02-11 19:47) [16]


> istok20 ©   (11.02.12 18:33) [11]

а вообще, есть еще более производительные виртуальные списки, даже более производительные чем ListView в виртуальном режиме. Например VirtualTreeView (http://www.soft-gems.net/). Очень известный и популярный компонент.


 
istok20 ©   (2012-02-12 13:10) [17]

вопрос такой еще: у меня листвью с MultiSelect"ом, надо иногда бегать по всем выделенным айтемам, т.к. такого отдельного св-ва у листвью нет, а бегать по всем айтемам с проверкой на Selected накладно, правильно ли я понимаю, что должен используя DataStateChange выставлять selected в своей объектной модели и бегать ессно уже по ней.. ?


 
istok20 ©   (2012-02-12 13:12) [18]


> c DoubleBuffered не может оно мерцать, не везде включил
> буферизацию значит.

а как ее можно включить "не везде"? но вообще у меня девовский TcxListView, может он чуть иначе себя ведет..


> Обновляй после изменения данных в списке для всех элементов
> разом.

Ну это само собой. обновил данные, и уже потом в конце сделал invalidate.


 
istok20 ©   (2012-02-12 13:13) [19]


> а вообще, есть еще более производительные виртуальные списки,
>  даже более производительные чем ListView в виртуальном
> режиме. Например VirtualTreeView (http://www.soft-gems.net/).
>  Очень известный и популярный компонент.


знаю, юзил, но в данном проекте на него не перейти, текущий TcxListView вполне устраивает


 
istok20 ©   (2012-02-12 15:04) [20]

а перебирать selected айтемы через GetNextItem c shecked state - нормальный выход из положения или не совсем?


 
DVM ©   (2012-02-12 17:58) [21]


> а перебирать selected айтемы через GetNextItem c shecked
> state - нормальный выход из положения или не совсем?

в виртуальном режиме не надо ничего перебирать в ListView - перебирай в своем списке циклом, свойство checked тоже храни в своем списке.



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

Текущий архив: 2014.12.14;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.007 c
6-1274251810
Dmitriy
2010-05-19 10:50
2014.12.14
контроль (учет) трафика WinInet


15-1399904738
Астахов Сергей
2014-05-12 18:25
2014.12.14
Экспорт данных в OpenOffice


15-1399721808
Дмитрий СС
2014-05-10 15:36
2014.12.14
Сделать из ноута bluetooth/usb клавиатуру.


15-1400163635
RDen
2014-05-15 18:20
2014.12.14
firefox при запуске открывает http://trafmarket.ru/install


2-1385580807
SKIPtr
2013-11-27 23:33
2014.12.14
запись параметров в ini файл