The Delphi Bug List

Entry No.
31
VCL - 一般 - コントロール - TCustomControl
ドラッグアンドドロップ: OnStartDrag イベントの発生が早すぎる場合がある
1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 4.03 5.0 5.01 6.0 6.01 6.02 Kylix 1.0
Unknown Exists Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown N/A
(訳注:5.01 日本語版では、1つ目の問題は fixed 、2つ目の問題は Exists でした)
解説
Reported by Steve Fillingham
私は、Delphi 2.0 の TControl におけるドラッグドロップに関する2つの問題を見つけました:
  1. (ヘルプに書かれている通り)OnEndDrag イベントの引数 Target は、次のようになるはずです:
    a)ドロップが受け取られた場合:受け付けたコントロールを参照する
    b)ドロップがキャンセルされた(ドロップを受け取らないコントロールにドロップした)場合:'nil'
    ListBox1 と適切なイベントを記述した Label1 とを使用した簡単なプログラムを作成することで、b)のケースが正常に動作しないことは簡単にわかります。Label1 をドロップを受け取らないコントロールにドロップする(つまり、キャンセルされる)と、ドロップ先のコントロールが OnDragDrop イベントを受け取らないにもかかわらず、Label1 の OnEndDrag イベントの引数 Target はドロップが成功しなかったコントロールを参照しています。
  2. OnStartDrag イベントは、コントロールのドラッグが開始されたことを意味します(と、ヘルプに書かれています)。ところが、DragMode = dmManual にしたコントロールの OnMouseDown イベントで BeginDrag(False) を実行した場合、本来なら5ピクセル移動してからドラッグが開始されるはずなのに、BeginDrag(False) の直後に OnStartDrag イベントが発生します。これも単純なテストプログラムで簡単に確認することができます。
Latest update of this entry: before April 1998
本家 The Delphi Bug List のエントリーはこちら
The Delphi Bug List 日本語訳 へ