2010-02-09 85 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