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;
これはいかがですか?どこかで一度このオンライン見つけ、私のcodesnippet DBにそれを保存:)
This pageは、おそらくしかし、すべてのあなたの質問を解決する...バックがあり、スクリーン座標にクライアントから行くための関数のように見えると
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;
幸運!
は、あなたがMouse.CursorPosまたはGetCursorPos関数を使用することができますが、あなたはまただけではなく、クリック時のれるonmousedownまたはonMouseUpのイベントを処理することができます。このようにして、余分な関数呼び出しを行うことなく、XとYの値をイベントハンドラのパラメータとして取得できます。
Mouse.CursorPos
プロパティは、の現在のポジションを通知します。コンピュータが低速で動作している場合、またはプログラムがメッセージに応答するのが遅い場合は、OnClick
イベントが最初に発生したときのマウスの位置と同じでない可能性があります。マウスボタンをクリックしたときにマウスの位置を取得するには、GetMessagePos
を使用します。それは画面座標を報告します。 TImage.ScreenToClient
でクライアントの座標に変換します。
代わりに、自分でOnMouseDown
とOnMouseUp
というイベントを処理することもできます。それらのパラメータには座標が含まれます。 をクリックするためには、両方ともイベントが発生する必要があることに注意してください。また、クリック数としてカウントを考慮する必要はないため、の操作を検出することもできます。