PaintBox内で右ドラッグしたままフォーム外へ移動しマウスアップした時にもマウスアップイベントを発生させたいのですが、、、どうすればいいのでしょうか?簡単なサンプルなどありましたら教えてください。
MouseDown時に、SetCaptureし、MouseUpでReleaseCaptureすれば出来ます。
にしのさん ありがとうございます。
MouseDown時に、SetCapture(PaintBox1.Canvas.Handle)としてMouseUpでReleaseCaptureしているのですがうまく作動しません。PaintBox1.Canvas.Handle の部分が悪いのでしょうか?初歩的な質問で恐縮です。
Canvas,Handleは、デバイスコンテキストのハンドルであり、ウィンドウハンドルではありません。
親ウィンドウ(HANDLEを持っているコントロール)の、ウィンドウハンドルを指定してください。
おんぷむらのうら(http://TakamiChie.at.infoseek.co.jp/)のおんぷ村倉庫に、マウスキャプチャ用の継承専用クラスがあります。よければどうぞ。
こんな感じ
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssRight in Shift then begin
SetCaptureControl(PaintBox1);
Label1.Caption := 'MouseDown';
end;
end;
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Label1.Caption := 'MouseUp';
end;
たかみちえさん、jokさんありがとうございます。
SetCaptureControl(PaintBox1);をMouseMoveイベントの中にも書いたので左右同時ドラッグが可能になりました。
助かりました。
>MouseMoveイベントの中にも書いたので
OnMouseMove イベントハンドラに書くのはまずいです。ただマウスが
横切っただけでも多数回発生しますので。OnMouseDown に書いてください。
jokさん、助言ありがとうございます。
わたしも不具合に気が付きまして、ボタンが押されているかどうかのフラグを設けてフラグがONの場合は継続しOFFの場合は開放するようにしました。
解決しました。
ツイート | ![]() |