TImageのOnClickイベントで、マウスのx、y座標を抽出したいと思います。画像に関してはそれらを好むが、フォームやウィンドウに関しては同じように良い。
5 に答える
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;
このMouse.CursorPos
プロパティは、マウスの現在の位置を示します。コンピュータの動作が遅い場合、またはプログラムのメッセージへの応答が遅い場合は、OnClick
イベントが最初に発生したときのマウスの位置と同じではない可能性があります。マウス ボタンがクリックされたときのマウスの位置を取得するには、 を使用しますGetMessagePos
。画面座標を報告します。でクライアント座標に変換しますTImage.ScreenToClient
。
OnMouseDown
別の方法として、 andOnMouseUp
イベントを自分で処理することもできます。パラメータには座標が含まれます。クリックが発生するには、両方のイベントが発生する必要があることに注意してください。ドラッグをクリックと見なしたくないため、ドラッグ操作を検出することもできます。
他の人が言っているように、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;
これをオンラインのどこかで見つけて、私のcodesnippet DBに保存しました:)
このページはおそらくあなたのすべての質問を解決します...しかし、クライアントから画面座標に移動したり戻ったりする機能があるようです..
幸運を!