C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Некорректно отображается картинка при Drag-е, если у TreeView назначены Images  (Прочитано 1355 раз)
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Некорректно отображается картинка при Drag-е, если у TreeView назначены Images
« : 21 Февраль 2015, 20:06:36 »

Всем привет

Давненько я тут не был. Наткнулся на совершенно непонятное поведение. Итак: есть TTreeView, внутри которого нужно перетаскивать ветки, и при этом показывать всю ветку, которая переносится. Казалось бы, решение достаточно тривиальное: наследуемся от TDragControlObjectEx, в его методе GetDragImages рисуем картинку, которую надо отображать при перетягивании ветки, и по OnStartDrag компонента TreeView:
Код
void __fastcall TForm1::TreeView1StartDrag(TObject *Sender,
   TDragObject *&DragObject)
{
   DragObject = new TMyDragControlObjectEx(TreeView1); //
}
Но вот в чем незадача: если у меня обычное дерево, без изображений (свойству Images не назначен никакой TImageList), то этот способ прекрасно работает, при перетягивании показывается картинка, которая нужна и которая была нарисована в методе GetDragImages(). Как только назначаем Images какой-то список - все перестает работать. Причем картинка правильно создается и заносится в TDragImageList, создаваемый моим объектом-потомком TDragControlObjectEx (проверял, занося в Image лежащий на форме содержимое этого драг-листа), но вот отображаться при Drag-е ветки дерева она не хочет ни в какую. Вместо этого показывается дефолтное изображение одного элемента дерева - того самого, который я захватил мышью.

Что еще более странно: если я продолжу тащить ветку, и "вынесу" ее за пределы TreeView, а потом, все так же не отпуская кнопку, верну назад - то... Ого!!! Чудо!!! Тянется-то, оказывается, так самая картинка, которая мне нужна!!! 

Отсюда вопрос: почему для того, чтобы эта картинка отобразилась, надо вынести объект за пределы контрола и потом вернуть назад? Что происходит? Как бороться с этим? Можно ли хотя бы программно как-о сымитировать, что мыша вышла за пределы контрола, и вернулась назад, чтобы эта картинка начала отображаться? Просто HideDragImage() + ShowDragImage() не помогает.

Аналогичный код, переписанный на Дельфи, работает абсолютно правильно, одинаково: и при назначенном свойстве Images, и при пустом - показывается нужное изображение.

Поиск в сети не дал результатов, только на одном из сайтов наткнулся на подобный вопрос, но он, к сожалению, остался без ответа. Если нужно - прикреплю тестовый проект (созданный в Builder XE2)
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Некорректно отображается картинка при Drag-е, если у TreeView назначены Images
« Ответ #1 : 22 Февраль 2015, 21:01:01 »

Прикрепи, проект всегда лучше описания 
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


« Ответ #2 : 22 Февраль 2015, 22:41:29 »

Вот проект (пробуем перетянуть ветку "1", при назначенном TreeView1->Images, а потом просто чистим это свойство и видим, что код прекрасно работает. Также не забываем попробовать "вытянуть" ветку за пределы компонента и вернуться назад) :
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.066 секунд. Запросов: 19.