![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Всем привет. Помогите
Смысл вот в чем. Есть ListView, в нем задания, выделяю что надо, запускаю, по окончании могу удалить, а могу и руками удалить выделенную строку. При смещении элементов, меняеться ItemIndex. Ну в итоге в потоке они друг на друга лезут и все зависает. Мне надо что бы в потоке во всех Synchronize() вывлдилась инфа по конкретной строке, поэтому я привязался к строке, но потом понял что при удалении, даже если пройтись по списку и переназначить Index то возможно где то он измениться все равно. Говорят что можно написать используя Lv.Data. Я вообще не понял как это делать... Помогите Пример прилогаю, мне бы с пояснениями и желательно максимально сохранить струтуру кода. Присоединённый файл ( Кол-во скачиваний: 7 )
____.rar 8,18 Kb |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Уже не раз писали, что удалять нужно от конца к началу, а не от начала к концу. Цикл организовать нужно от конца к началу. Добавлено через 2 минуты и 19 секунд Я, честно говоря, не понял, при чём здесь потоки? Можешь пояснить? Как связано удаление строк из ListView с потоками? И ещё вопрос. А может замечание. Вопросы по организации циклов по ListView лучше задавать в разделе для новичков ;) |
|||
|
||||
| ZBugz |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Так, это я сделаю
Значит так, выделяю задания, они ухоодят в поток, выполняються, от каждого задания в его строчку пишу данные, типа сколько процентов выполнено. В момет выполнения я заходл удалить строку, удалил. Последующие строки сдивнулись, отображение информации соответственно должно тоже сдвинуться, я это сделал. А вот если поток завершился, к примеру 2-е задание раньше чем 1-е и т.д. То оно по окончании удаляеться, но так как задание (строка), к примеру 3, тоже завершилось и тоже встало в очередь на удаление, а ItemIndex уже поменялся, то в итоге задание отписывает что оно завершенно в тот itemIndex, которого уже нету. Ну и получаем ошибку.
Да тут впринципе не о нем речь. Добавлено через 1 минуту и 5 секунд Проблема в том, что информацию я вывожу от номера строки, по другому просто не умею :( |
||||||
|
|||||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Ты выполняешь это всё в потоке? Или ты не понимаешь, что такое поток - THREAD? Или я не могу догнать, в чём у тебя проблема. Многабукаф - мало толку. Кхм... тогда о чём? Добавлено через 1 минуту и 6 секунд
Ага, значит речь именно о потоках Добавлено через 2 минуты и 34 секунды
Да, в Data можно записать какой-нибудь уникальный код, когда ты добавляешь очередную строку. |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
![]() Обрати внимание на нумерацию справа. Я создал по порядку все строки в списке. Потом удалили несколько нечётных. Затем скопировал в мемо всё. При чём номера строк в мемо брал из Data. Проект прикрепил. Присоединённый файл ( Кол-во скачиваний: 6 )
lv.zip 6,83 Kb |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Проект был создан на Delphi 2007
Это сообщение отредактировал(а) Akella - 12.4.2010, 21:41 |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Я так делал. Та то работает. Мне бы как в моем поекте |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Я имел ввиду что бы прям в дату весь поток запихнуть (потом, когда надо удалить поток\строку) и выводить информацию от тех параметров которые я в поток передал не привязываясь к строке.
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| Mikel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: 1 Всего: 2 |
В Data можно запихнуть хоть паровоз
-------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Mikel прав. Запихиваеться легко, я пробывал Но суть не в этом, меня это не устраивает по другим причинам. Я сегодня отпишу, как только проверю одну весчь от Akella |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Data - это указатель, потому поток туда не запихнёшь ;)
|
|||
|
||||
| ZBugz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Блин, я в шоке Короче, все сделал типа так:
Гиде CT это массив CT: array [1..2000] of TThread; и idx это номер потока Так вот, 0 и 1 строка нормально отображаеться, а все что выше, почему то сьежает ниже через строку... Короче, берем 2-е задание, нажимаю выполнить, до CT[idx].Start и в потоке в Create N.Index=2 (N: TListItem), в Execute попадает как N.Index=3. И это только тогда, когда я добавил задания в чистый ListView, если загрузить с заданиями, то ниче не двигаеться. Шё це такэ ? Это сообщение отредактировал(а) ZBugz - 14.4.2010, 14:03 |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
и всё равно засовываешь TThread в Pointer Добавлено через 49 секунд Это называется "Впихнём невпихуемое", да? Добавлено через 1 минуту и 31 секунду Продолжай в том же духе. За упорство Ктулху тебя вознаградит. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |