Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1328811083
istok20
2012-02-09 22:11
2014.12.14
динамический листвью..


15-1400002027
Kerk
2014-05-13 21:27
2014.12.14
Вызов Free внутри класса


15-1400013003
Юрий
2014-05-14 00:30
2014.12.14
С днем рождения ! 14 мая 2014 среда


6-1270567992
Zoom
2010-04-06 19:33
2014.12.14
Indy 9 IdTCPServer, как узнать IP адрес клиента ?


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский