コントロールがクリックされたときにマウスの座標を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/826914

  •  05-07-2019
  •  | 
  •  

質問

TImageのOnClickイベントで、マウスのx、y座標を抽出したいと思います。私は画像に関してはそれらを好むでしょうが、フォームやウィンドウに関しては同じくらい良いです。

役に立ちましたか?

解決

Mouse.CursorPosにはTPointが含まれ、TPointにはX位置とY位置が含まれます。この値はグローバル座標にあるため、画面座標をウィンドウ座標に変換するScreenToClientルーチンを使用してフォームに変換できます。

Delphiヘルプファイルによると、Windows.GetCursorPosは失敗する可能性があり、Mouse.CursorPosはこれをラップして、失敗するとEOsExceptionを発生させます。

var
  pt : tPoint;
begin
  pt := Mouse.CursorPos; 
  // now have SCREEN position
  Label1.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
  pt := ScreenToClient(pt);
  // now have FORM position
  Label2.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
end;

他のヒント

Mouse.CursorPos プロパティは、マウスの現在の位置を示します。コンピューターの動作が遅い場合、またはプログラムのメッセージへの応答が遅い場合、 OnClick イベントが最初に発生したときのマウスの位置とは異なる場合があります。マウスボタンがクリックされた時点でのマウスの位置を取得するには、 GetMessagePos 画面座標を報告します。 TImage.ScreenToClient を使用してクライアント座標に変換します。

別の方法は、 OnMouseDown および OnMouseUp イベントを自分で処理することです。パラメーターには座標が含まれます。 クリックが発生するには、両方のイベントが発生する必要があることに注意してください。また、ドラッグはクリックとしてカウントされるとは思わないので、ドラッグ操作を検出することもできます。

他の人が言ったように、Mouse.CursorPosまたはGetCursorPos関数を使用できますが、OnClickの代わりにOnMouseDownまたはOnMouseUpイベントを処理することもできます。このようにして、追加の関数呼び出しを行うことなく、イベントハンドラーのパラメーターとしてX値とY値を取得します。

これはどうですか?

procedure TForm1.Button1Click(Sender: TObject);
var
MausPos: TPoint;
begin
  GetCursorPos(MausPos);
  label1.Caption := IntToStr(MausPos.x);
  label2.Caption := IntToStr(MausPos.y);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  SetCursorPos(600, 600);
end;

これをどこかでオンラインで一度見つけて、私のコードスニペットDBに保存しました:)

このページは、おそらくすべての質問を解決します。 。クライアントから画面座標に移動したり戻したりする関数があるようです。

がんばって!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top