掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
マウスのx方向、y方向の移動量dx、dyを検知して操作するには? (ID:28028)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
「あら」さんの作成した「さかさまうす」を使ってみて思いました。 「マウスの移動量を検知して、後に操作すればよいのではないか。」と。 移動量の検知は、「妙義のカタツムリ」さんのものをそのまま使わせてもらうことにしました。 // マウスの回転 function GetMouseRotation(X, Y: Integer): TMouseRotation; const X0: integer = 0; Y0: integer = 0; X1: integer = 1; Y1: integer = 1; Rotation: real = 0; var Theta: real; Ax, Ay, Bx, By: integer; InnerProd, OuterProd: real; begin result:= mrNone; Ax:= X-X1; Ay:= Y-Y1; // vectorA: P(X1, Y1) → P(Y1, Y) Bx:= X1-X0; By:= Y1-Y0; // vectorB: P(X0, Y0) → P(X1, Y1) repeat OuterProd:= Ax*By-Ay*Bx; if OuterProd = 0 then break; InnerProd:= Ax*Bx+Ay*By; if Abs(InnerProd) <= 1 then break; Theta:= ArcCos(InnerProd/Sqrt(Ax*Ax+Ay*Ay)/Sqrt(Bx*Bx+By*By)); if OuterProd > 0 then Theta:= 0 - Theta; Rotation:= Rotation + Theta; if Rotation >= PI*2 then begin result:= mrRight; Rotation:= 0; end else if Rotation <= -PI*2 then begin result:= mrLeft; Rotation:= 0; end; X0:= X1; Y0:= Y1; X1:= X; Y1:= Y; until true; end; つぎに操作ですが、 SetCursorPos(x,y) を使えばよいと考えました。 var oldx,oldy: integer; dx,dy:integer; procedure TForm1.FormCreate(Sender: TObject); begin oldx:=0; oldy:=0; dx:=0; dy:=0; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin dx:= x-oldx; dy:= y-oldy; oldx:= x; oldy:= y; SetCursorPos(x,y); end; end; やってみるとマウスカーソルがフォーム外からフォーム上に入ってきたとき、おかしなところにマウスカーソルが飛んでしまって、フォーム上に乗りません。 特殊な操作が必要なのでしょうか。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.