![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Всем привет!
Проблема: В ListView 2 колонки: Название Статус при запуске потоку передаётся номер(ItemIndex) элемента ListView.items к которому принадлежит поток. По номеру ItemIndex поток посылает в колонку Статус сообщения. Но вот если с ListView добавить или убрать элемент. То поток в случае добавления элемента будет посылать сообщения не своему item'у, а чужому. в случае удаления поток попытается послать сообщение item/s которого уже нет в списке, и вызовет AccesViolation. Как это можно исправить? ![]() При помощи чего можно уведомить поток о том что произошло? Хотелось бы наглядного примера или подробной растолковки ситуации. ![]() |
![]() |
![]() |
![]() |
#2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Фишка в том чтобы в потоке было поле - TListItem, которому передается итем, с которым будет работать поток, а не передавать потоку ItemIndex. Тогда при удалении этот Итем и освобождай. а в потоке проверяй - если он не nil то продолжать иначе выйти
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
гм все немного сложно=)
А если SendMessages ипользовать? и при помощи них сообщать новый индекс... |
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Поясню примером )
Становись на Итем, и жми кнопку - итем удалится, его поток прекратит работу.
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Не так поняли=)
В LIstView 3 итема и один поток принадлежный к итему с индексом 2. 0 - Неработает 1 - неработает 2 - работает удаляем 1 итем, получается 0 - неработает 1 - работает в поток 1 итема(Бывший 2-ой) хранит значение 2, потому что изначально 3 итема(0,1,2). При попытке послать сообщение на 2 индекс, вываливает AV потому что элемента с индексом 2 нет вообще т.к. есть только 0 и 1. Последний раз редактировалось Человек_Борща; 30.12.2010 в 15:26. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Цитата:
Или же как сказал Stilet в Thread хранить не индекс а ссылку на TListViewItem которую и посылать. И при этом не забывать чистить эту самую ссылку при удалении в ListView.
программа — запись алгоритма на языке понятном транслятору
|
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]() В том и дело что поток привязывается (в моем примере) не к индексу, который изначально нестабилен, а к элементу, который до момента освобождения аки пуп земли несокрушим и не сдвинуть его никому ). А то что ListView у себя в канве перестраивает, это его проблемы - обьекты все равно размещены так что поток, привязанный к обьекту знает всегда где он и как к нему обратится (Не здря я тебе пример дал где не по индексу связь ![]()
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Цитата:
программа — запись алгоритма на языке понятном транслятору
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как перетащить элемент ListView в другой ListView? | Paul Hindenburg | Компоненты Delphi | 5 | 26.01.2013 11:35 |
программное добавление items в ListView | Марк Охман | Общие вопросы Delphi | 4 | 30.12.2010 16:44 |
Синхронизация работы Tthread и данных в ListView как реализовать? | Человек_Борща | Общие вопросы Delphi | 4 | 20.12.2010 01:00 |
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. | Casper-SC | WPF, UWP, WinRT, XAML | 2 | 12.08.2010 19:04 |
Удаление Items в ListView | BioHEX | Общие вопросы Delphi | 1 | 04.01.2010 19:43 |