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つの問題を見つけました:
-
(ヘルプに書かれている通り)OnEndDrag イベントの引数 Target は、次のようになるはずです:
- a)ドロップが受け取られた場合:受け付けたコントロールを参照する
- b)ドロップがキャンセルされた(ドロップを受け取らないコントロールにドロップした)場合:'nil'
ListBox1 と適切なイベントを記述した Label1 とを使用した簡単なプログラムを作成することで、b)のケースが正常に動作しないことは簡単にわかります。Label1 をドロップを受け取らないコントロールにドロップする(つまり、キャンセルされる)と、ドロップ先のコントロールが OnDragDrop イベントを受け取らないにもかかわらず、Label1 の OnEndDrag イベントの引数 Target はドロップが成功しなかったコントロールを参照しています。
- OnStartDrag イベントは、コントロールのドラッグが開始されたことを意味します(と、ヘルプに書かれています)。ところが、DragMode = dmManual にしたコントロールの OnMouseDown イベントで BeginDrag(False) を実行した場合、本来なら5ピクセル移動してからドラッグが開始されるはずなのに、BeginDrag(False) の直後に OnStartDrag イベントが発生します。これも単純なテストプログラムで簡単に確認することができます。
|
|