|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.10.2011, 18:25 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Согласование TObjectList и TlistView при отображении, только, определённых элементов в ListView
Доброго времени всем!
Есть ListView и есть ObjectList. В ListView понадобилось отображать только те элементы, которые хочет юзер. это успешно получается путём перезаполнения списка: 1. чистим ListView 2. для TObjectList пишем код, который будет добовлять в ListView обьекты из себя,только с опред. характеристикой(идентификатор). Далее мне понадобилось удалять, смотреть данные из отсоритрованного списка. Обращение к элементу TObjectList идёт через индекc который выделен в Listview в данный момент. Следовательно баг. Отображается не то что хотелось. К примеру: Есть 4 элемента в ObjectList: Формат: Индекс элемента - идентификатор 0 - 1 1 - 1 2 - 2 3 - 2 ListView отсортирован и отображает элементы только с ид. = 2: 0 - 2 1 - 2 Не сложно догодаться, что дабл-кликнув на элементе ListView, с индексом 0, нам вернёт ObjectList не верные данные, так ещё и не из этого элемента(0 - 1). т.к обращение к элементам ObjectList идёт через тек. ItemIndex у ListView. Как это исправить? Последний раз редактировалось Человек_Борща; 23.10.2011 в 18:31. |
23.10.2011, 18:54 | #2 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
Один TList - как хранилище всех созданных объектов
Второй TList - для отображения отобранных по фильтру из первого списка (только ссылки на элементы первого списка). Сортировки по второму. Удаление: сначала из хранилища (поиск по объекту), а затем из второго - по индексу. А затем уже освобождение удалённого элемента. TListView - в режиме работы с виртуальными данными |
23.10.2011, 19:17 | #3 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
хм, о промежуточном TList как-то не подумал.
А об: Цитата:
|
|
23.10.2011, 19:43 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
в ListItem есть свойство Data, в котором можно хранить как любой индекс, так и ссылку на объект. Можно им пользоваться для идентификации. Можно в неотображаемых SubItem-ах хранить ссылочную инфу, не очень удобно, что в символьном виде.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
23.10.2011, 20:08 | #5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Я всегда подобные вещи делал через привязку навроде
Код:
|
23.10.2011, 20:40 | #6 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
TListView().OwnerData := True;
TListView().Items.Count := TList().Count; Данные для визуализации в обработчике событии OnData по индексу параметра Item: TListItem. Добавлять Item не надо. В обработчике: Item.Caption и Item.SubItems - присваиваете данные из Вашего объекта TList[Item.Index]. Вот, в общем-то, и всё. |
23.10.2011, 21:58 | #7 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
phomm,
Интересно, вот как запихиваю в DATA что-то: Код:
Код:
|
23.10.2011, 22:04 | #8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
23.10.2011, 22:11 | #9 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Да, TObject если быть точным.
Но ведь, Li.Data это Pointer. И передовать нужно через @, или я опять что-то напутал? [UP] попробовал ваш вариант. Всеравно, на той же строке, выпадает в AV. Последний раз редактировалось Человек_Борща; 23.10.2011 в 22:14. |
23.10.2011, 22:13 | #10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Так Pointer это адрес, а все указатели на объекты тоже адреса
ADD А колпак убрали при чтении? aIndx правильно передали? Этот метод 100% рабочий, так что ошибка в другом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 23.10.2011 в 22:21. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TListView перемещиение(вверх-вниз) элементов списка | Человек_Борща | Общие вопросы Delphi | 11 | 05.02.2012 18:51 |
Плагин для Windows или действия с контекстным меню при выборе опр. типа файла | Человек_Борща | Общие вопросы Delphi | 7 | 02.10.2011 21:09 |
TListView+AlphaControls+CustomDrawI tem - баг при отрисовке. | XerSon | Общие вопросы Delphi | 9 | 09.03.2011 12:36 |
Закрытие окна при нажатии опр. клавиши на клавиатуре. | Borgond | Общие вопросы Delphi | 6 | 25.08.2010 01:14 |
Отбор при отображении | winson | БД в Delphi | 1 | 18.05.2009 17:04 |