2010-02-09 55 views
3

我有一个实现拖放的树控件。我使用重写的OnStartDrag()来获取我自己的TDragObjectEx,它在拖动时显示图像。这在树控件中完美工作,但只要我离开树控件,图像就会消失。游标保持不变。Delph/Builder拖放图像,图像在离开控制时消失

我试图实现OnDragOver,重置图像,但似乎不工作。

对此有何暗示?我正在使用C++ builder 2010,但delphi会做同样的事情。

更新: 在窗体控件中的每个控件上发现了设置csDisplayDragImage,并在窗体本身中解决了这个问题。有没有一种自动化的方式来让csDisplayDragImage在整个表单中设置,而不必在每个项目的Create中手动设置?

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

回答

4

如果我记得正确的,你必须包括在其中的你想拖动图像控制“ControlStyle”的[csDisplayDragImage]标志可以看出,当某事。被拖动到它们上面。

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

+0

正确...将AlwaysShowDragImages转换为true即可完成作业。 – 2010-02-10 02:38:33

0

显然,每个要显示拖动图像的控件都需要设置csDisplayDragImagecontrol style。您可以将该标志添加到控件和它用一个简单的函数的所有孩子:

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)

+0

这有效,但将AlwaysShowDragImages设置为true会更容易。谢谢。 – 2010-02-10 02:38:59