Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2011, 14:36   #1
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию Как перемещать itemы в Listivew (vsReport) с ownerdata=true?

Всем доброго времени суток.

Использую Listview в режиме ownerdata=true.
Все бы хорошо, но как реализовать перемещение (дарндроп) строк внутри?

Когда ownerdata ВЫключен, то все отлично, а с включенным проблемы.
Главное это то что видимо не работает GetItemAt(X, Y). Он выдает неверный item.

Кто-нибудь с этим сталкивался? Как решить проблему?

Заранее благодарен.
Anfall вне форума Ответить с цитированием
Старый 24.08.2011, 16:54   #2
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

А почему решили, что выдаёт неверный Item? Index неверный?
ReportCube вне форума Ответить с цитированием
Старый 24.08.2011, 17:17   #3
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
А почему решили, что выдаёт неверный Item? Index неверный?
Ага. Он берет итем или выше или ниже. А в обычном режиме все ок.
Anfall вне форума Ответить с цитированием
Старый 24.08.2011, 17:29   #4
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Не сталкивался с таким. Проверьте внимательнее свой код, возможно, что пытаетесь получить Item после каких-то манипуляций со вставкой/перемещением. Во всяком случае это достаточно легко проверить - просто выводите в Caption формы Item.Index при любых кликах на TListView - так быстро убедитесь в работоспособности компонента и будете искать ошибку в своём коде.
ReportCube вне форума Ответить с цитированием
Старый 24.08.2011, 20:36   #5
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
Не сталкивался с таким. Проверьте внимательнее свой код, возможно, что пытаетесь получить Item после каких-то манипуляций со вставкой/перемещением. Во всяком случае это достаточно легко проверить - просто выводите в Caption формы Item.Index при любых кликах на TListView - так быстро убедитесь в работоспособности компонента и будете искать ошибку в своём коде.
Да нет, все 100% нормально.
Anfall вне форума Ответить с цитированием
Старый 24.08.2011, 20:41   #6
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

100% нормально и не работает? Тогда проверьте: OwnerDate=True означает внешнее хранилище данных. Как оно у Вас реализовано и каков к нему доступ из TListView? Чудес не бывает, знаете ли. Если абсолютно уверены - код на обработчики TListView в студию
ReportCube вне форума Ответить с цитированием
Старый 24.08.2011, 22:02   #7
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Да точно все верно.

Проблема вот в чем. Берем 10-й итем и перемещаем его в 6-й. А выделяется только 9-й.


А вот как это работает с выключенным ownerdata:

Последний раз редактировалось Anfall; 24.08.2011 в 22:06.
Anfall вне форума Ответить с цитированием
Старый 24.08.2011, 23:10   #8
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Похоже, что Ваша проблема в другом: OwnerDate=True означает внешнее хранилище данных и TListView только отображает данные, которые Вы должны обрабатывать программно, в том числе и метод Drag&Drop. В данном случае выделенный 10 элемент Вы хотите перенести на место 6 или, иначе, выделенный Item вы переносите в место GetItemAt(X, Y). Ну так и переносите методами Вашего хранилища данных, а после переноса давайте команду Refresh компоненту TListView
ReportCube вне форума Ответить с цитированием
Старый 24.08.2011, 23:26   #9
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
Похоже, что Ваша проблема в другом: OwnerDate=True означает внешнее хранилище данных и TListView только отображает данные, которые Вы должны обрабатывать программно, в том числе и метод Drag&Drop. В данном случае выделенный 10 элемент Вы хотите перенести на место 6 или, иначе, выделенный Item вы переносите в место GetItemAt(X, Y). Ну так и переносите методами Вашего хранилища данных, а после переноса давайте команду Refresh компоненту TListView
Да я знаю, само собой про внешнее хранилище. Мне ж нужно получить индекс, куда переместить итемы во внешнем хранилище. А индекс не получить, т к трабла, которая на скрине.
Anfall вне форума Ответить с цитированием
Старый 24.08.2011, 23:41   #10
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Так нет никакого трабла. За хранение выделенных элементов тоже программист отвечает и при изменении списка именно программист должен изменить выделение
ReportCube вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перемещать label с помощью мыши? Лукманов Александр Общие вопросы Delphi 9 26.11.2018 20:23
Как перемещать изображение по панели? AndersonEgo C# (си шарп) 3 27.05.2011 10:05
Как узнать индексы выделенных итемов в ListView при OwnerData? 3D Hunter Общие вопросы Delphi 3 02.10.2009 10:24
как работать с новыми CheckBox в ListView в режиме vsReport cybopob90 Компоненты Delphi 2 24.03.2009 13:02
Как перемещать? Черничный Общие вопросы Delphi 4 09.06.2008 13:56