【问题标题】:Delph/Builder drag and drop with image, image disappears when leaving controlDelph/Builder用图片拖拽,离开控制时图片消失
【发布时间】:2010-02-09 03:03:36
【问题描述】:

我有一个实现拖放的树控件。我使用重写的 OnStartDrag() 来获取我自己的 TDragObjectEx,它在拖动时显示图像。这在树控件中完美地工作,但是一旦我离开树控件,图像就会消失。光标仍然存在。

我尝试实现 OnDragOver 来重置图像,但这似乎不起作用。

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

更新: 发现在表单控件中的每个控件上设置csDisplayDragImage,并且在表单本身中解决了这个问题。是否有某种自动化方法可以在整个表单中设置 csDisplayDragImage 而不必在 Create 中为每个项目手动设置?

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

【问题讨论】:

    标签: delphi c++builder vcl


    【解决方案1】:

    如果我没记错的话,您必须在控件的“ControlStyle”中包含 [csDisplayDragImage] 标志,以便在某时看到拖动图像的控件。正在被他们拖过..

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

    【讨论】:

    • 正确...将 AlwaysShowDragImages 设置为 true 就可以了。
    【解决方案2】:

    显然,要显示拖动图像的每个控件都需要设置csDisplayDragImage control 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)

    【讨论】:

    • 这可行,但将 AlwaysShowDragImages 设置为 true 要容易得多。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2012-06-08
    • 1970-01-01
    • 2019-09-07
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多