いつも拝見させていただいています。
早速質問させていただきます。
TWinControlを継承したコントロールを作成しているのですが、
DragModeをdmAutomaticにしたときに
WM_LBUTTONDOWNメッセージメソッドが動作しないのですが、
どなたか原因をご存知でしょうか。
また、回避方法などご存知の方がいらっしゃいましたら、
ご回答よろしくお願いします。
作成しているコントロールは単純にTWinControlから派生させ、
WM_LBUTTONDOWNメッセージメソッドを記述しただけのものです。
例えば、TEditでも、dmAutomaticの時にOnMouseDownが発生しないので仕様だと思います。
回避方法は、dmManualで処理させればよろしいかと。
早速のご回答ありがとうございます。
重ねての質問になってしまいますが、dmManualにした場合、
Drag&Dropの実装はどのように行うのでしょうか。
dmManualでもMouseDownにBeginDragを記述すれば可能ですが、
ドラッグとクリックを区別する必要があるので、悩んでいます。
良い解決方法があれば、ご回答よろしくお願いします。
BeginDragだと、Immediate引数をfalseにしていてもすぐにReleaseCaptureされています。
これが問題になっているのだと思います。
ドラッグとクリックをどう切り分けるかに依りますが、例えばBeginDragと同じように、ドラッグ開始時のクリックが発生してもよいのであれば、
1.MouseDownでマウスカーソル位置を保存
2.MouseMoveでマウスの移動量が一定値以上であればBeginDrag。
これでよいかと思います。
# 2の時点(BeginDragの直後)で、クリックも呼ばれます。
BeginDrag後のクリックをキャンセルするやりかたの場合は、DoClickで、BeginDrag時のクリックか、通常のクリックかを判別させれば良いかと思います。
ツイート | ![]() |