3


0

Delph / Builderの画像をドラッグアンドドロップ、コントロールを離れると画像が消える

ドラッグアンドドロップを実装するツリーコントロールがあります。 オーバーライドされた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)