Перетаскивание Delph / Builder с изображением, изображение исчезает при выходе из управления - PullRequest
3 голосов
/ 09 февраля 2010

У меня есть элемент управления дерева, который реализует перетаскивание. Я использую переопределенный OnStartDrag (), чтобы получить свой собственный TDragObjectEx, который показывает изображение при перетаскивании. Это прекрасно работает в древовидной структуре, но как только я покину древовидную структуру, изображение исчезнет. Курсор остается, хотя.

Я пытался реализовать OnDragOver, чтобы сбросить изображение, но это не работает.

Есть намеки на это? Я использую C ++ Builder 2010, но Delphi будет делать то же самое.

Обновление: Найден параметр csDisplayDragImage для каждого элемента управления в форме элементов управления, и в самой форме эта проблема решается самостоятельно. Есть ли какой-то автоматизированный способ установить csDisplayDragImage во всей форме, а не устанавливать его вручную в Create для каждого элемента?

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ControlStyle << csDisplayDragImage;
    RMU->ControlStyle << csDisplayDragImage;
    Button1->ControlStyle << csDisplayDragImage;
}

Ответы [ 2 ]

4 голосов
/ 09 февраля 2010

Если я правильно помню, вы должны включить флаг [csDisplayDragImage] в «ControlStyle» элементов управления, для которых вы хотите, чтобы перетаскиваемые изображения были видны при sth. тянется над ними ..

Обновление: установка «AlwaysShowDragImages» объекта DragObject приводит к тому, что изображение перетаскивания отображается по всему рабочему столу.

0 голосов
/ 10 февраля 2010

Очевидно, что каждый элемент управления, который будет отображать перетаскиваемое изображение, должен иметь csDisplayDragImage стиль элемента управления . Вы можете добавить этот флаг в элемент управления и всех его детей с помощью простой функции:

void AddDisplayDragImageStyle(TControl* ctl)
{
  ctl->ControlStyle << csDisplayDragImage;
  TWinControl* win = dynamic_cast<TWinControl*>(ctl);
  if (win)
    for (int i = 0; i < win->ControlCount; ++i)
      AddDisplayDragImageStyle(win->Controls[i]);
}

Имейте форму вызова, которая сама по себе: AddDisplayDragImageStyle(this).

...