void __fastcall TForm1::FormCreate(TObject *Sender) { ControlStyle << csDisplayDragImage; RMU->ControlStyle << csDisplayDragImage; Button1->ControlStyle << csDisplayDragImage; }
3
0
ドラッグアンドドロップを実装するツリーコントロールがあります。 オーバーライドされたOnStartDrag()を使用して、ドラッグ中に画像を表示する独自のTDragObjectExを取得します。 これはツリーコントロール内で完全に機能しますが、ツリーコントロールを離れるとすぐに画像が消えます。 ただし、カーソルはそのままです。
OnDragOverを実装して画像をリセットしようとしましたが、動作しないようです。
これについてのヒントは? 私はC ++ Builder 2010を使用していますが、delphiは同じことをします。
更新:フォームコントロールの各コントロールにcsDisplayDragImageを設定すると、フォーム自体でこの問題が解決されます。 csDisplayDragImageを各アイテムの作成で手動で設定するのではなく、フォーム全体に設定する自動化された方法はありますか?
void __fastcall TForm1::FormCreate(TObject *Sender) { ControlStyle << csDisplayDragImage; RMU->ControlStyle << csDisplayDragImage; Button1->ControlStyle << csDisplayDragImage; }
2 Answer
4
正しいことを覚えていれば、ドラッグしたときに画像を表示したいコントロールの「ControlStyle」に[csDisplayDragImage]フラグを含める必要があります。 それらの上にドラッグされています。
更新:DragObjectの「AlwaysShowDragImages」を設定すると、デスクトップ全体にドラッグ画像が表示されます。
0
明らかに、ドラッグ画像を表示する各コントロールには、 csDisplayDragImage
control styleセットが必要です。 単純な関数を使用して、コントロールとそのすべての子にそのフラグを追加できます。
void AddDisplayDragImageStyle(TControl* ctl) { ctl->ControlStyle << csDisplayDragImage; TWinControl* win = dynamic_cast(ctl); if (win) for (int i = 0; i < win->ControlCount; ++i) AddDisplayDragImageStyle(win->Controls[i]); }
フォームでそれを呼び出す: AddDisplayDragImageStyle(this)
。