フォーム外のマウスイベントを取得するには?

解決


うただ  2004-02-19 17:03:16  No: 7227

PaintBox内で右ドラッグしたままフォーム外へ移動しマウスアップした時にもマウスアップイベントを発生させたいのですが、、、どうすればいいのでしょうか?簡単なサンプルなどありましたら教えてください。


にしの  2004-02-19 18:01:46  No: 7228

MouseDown時に、SetCaptureし、MouseUpでReleaseCaptureすれば出来ます。


うただ  2004-02-19 20:49:16  No: 7229

にしのさん  ありがとうございます。
MouseDown時に、SetCapture(PaintBox1.Canvas.Handle)としてMouseUpでReleaseCaptureしているのですがうまく作動しません。PaintBox1.Canvas.Handle  の部分が悪いのでしょうか?初歩的な質問で恐縮です。


たかみちえ  URL  2004-02-19 21:31:34  No: 7230

Canvas,Handleは、デバイスコンテキストのハンドルであり、ウィンドウハンドルではありません。
親ウィンドウ(HANDLEを持っているコントロール)の、ウィンドウハンドルを指定してください。

  おんぷむらのうら(http://TakamiChie.at.infoseek.co.jp/)のおんぷ村倉庫に、マウスキャプチャ用の継承専用クラスがあります。よければどうぞ。


jok  2004-02-19 22:32:58  No: 7231

こんな感じ

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;


うただ  2004-02-19 23:07:59  No: 7232

たかみちえさん、jokさんありがとうございます。
SetCaptureControl(PaintBox1);をMouseMoveイベントの中にも書いたので左右同時ドラッグが可能になりました。
助かりました。


jok  2004-02-19 23:12:10  No: 7233

>MouseMoveイベントの中にも書いたので

OnMouseMove イベントハンドラに書くのはまずいです。ただマウスが
横切っただけでも多数回発生しますので。OnMouseDown に書いてください。


うただ  2004-02-19 23:29:49  No: 7234

jokさん、助言ありがとうございます。
わたしも不具合に気が付きまして、ボタンが押されているかどうかのフラグを設けてフラグがONの場合は継続しOFFの場合は開放するようにしました。


うただ  2004-02-19 23:52:36  No: 7235

解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加