Delph / Builder拖放图像,图像在离开控件时消失

时间:2010-02-09 03:03:37

标签: delphi c++builder vcl

我有一个实现拖放的树形控件。我使用重写的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 个答案:

答案 0 :(得分:4)

如果我没记错的话,你必须在控件的“ControlStyle”中加入[csDisplayDragImage]标志,你想要在某些控件上看到拖动图像。被拖过来......

更新:设置DragObject的“AlwaysShowDragImages”会导致拖动图像在整个桌面上显示。

答案 1 :(得分:0)

显然,每个要显示拖动图像的控件都需要设置csDisplayDragImage control style。您可以使用一个简单的函数将该标志添加到控件及其所有chilren:

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)