代码之家  ›  专栏  ›  技术社区  ›  Gregor Brandt

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

  •  3
  • Gregor Brandt  · 技术社区  · 14 年前

    我有一个实现拖放的树控件。我使用一个重写的onStartDrag()来获取我自己的TdragObjectex,它在拖动时显示一个图像。这在树控件中非常有效,但是一旦我离开树控件,图像就会消失。但光标仍保留。

    我试图实现OnDragover,以重置图像,但这似乎不起作用。

    有什么线索吗?我使用的是C++Builder 2010,但是Delphi也会做同样的事情。

    更新: 找到在表单控件中的每个控件上设置csDisplayDragImage,并且表单本身解决了此问题。有没有一些自动的方法让CSDisplayDragImage在整个表单中设置,而不是在为每个项目创建时手动设置?

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        ControlStyle << csDisplayDragImage;
        RMU->ControlStyle << csDisplayDragImage;
        Button1->ControlStyle << csDisplayDragImage;
    }
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Sertac Akyuz    14 年前

    如果我记得正确,您必须在控件的“controlStyle”中包含[csDisplayDragImage]标志,当某个控件被拖动到该控件上时,您希望看到拖动图像。

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

        2
  •  0
  •   Gregor Brandt    14 年前

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

    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) .