Всем привет
Давненько я тут не был. Наткнулся на совершенно непонятное поведение. Итак: есть 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)