16

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

4

5 に答える 5

30

Mouse.CursorPos には 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;
于 2009-05-05T21:19:38.613 に答える
10

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

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

于 2009-05-06T13:30:44.130 に答える
6

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

于 2009-05-05T21:22:12.837 に答える
4

これはどう?

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;

これをオンラインのどこかで見つけて、私のcodesnippet DBに保存しました:)

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

幸運を!

于 2009-05-05T21:18:50.707 に答える