Форум: "Основная";
Текущий архив: 2014.12.14;
Скачать: [xml.tar.bz2];
Вниздинамический листвью.. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c