Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

динамический листвью.. [D7]


Страницы:   1 2

istok20 ©   (2012-02-09 22:11:00) 

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 его не сделает, проверял)


DVM   (2012-02-12 17:58:00) [1]


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

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


istok20   (2012-02-12 15:04:00) [2]

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


istok20   (2012-02-12 13:13:00) [3]


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


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


istok20   (2012-02-12 13:12:00) [4]


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

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


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

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


istok20   (2012-02-12 13:10:00) [5]

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


DVM   (2012-02-11 19:47:00) [6]


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

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


DVM   (2012-02-11 19:43:00) [7]


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

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


istok20   (2012-02-11 19:04:00) [8]


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


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


sniknik   (2012-02-11 18:52:00) [9]

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


istok20   (2012-02-11 18:36:00) [10]


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


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


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


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


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


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


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

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


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

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


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

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


sniknik   (2012-02-10 21:41:00) [13]

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


sniknik   (2012-02-10 21:40:00) [14]

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


istok20   (2012-02-10 21:07:00) [15]

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

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

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


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


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

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


istok20   (2012-02-10 02:58:00) [17]

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


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

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


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

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


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

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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо