2009-05-05 13 views

答えて

19

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; 
3

これはいかがですか?どこかで一度このオンライン見つけ、私の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; 

幸運!

4

は、あなたがMouse.CursorPosまたはGetCursorPos関数を使用することができますが、あなたはまただけではなく、クリック時のれるonmousedownまたはonMouseUpのイベントを処理することができます。このようにして、余分な関数呼び出しを行うことなく、XとYの値をイベントハンドラのパラメータとして取得できます。

5

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

代わりに、自分でOnMouseDownOnMouseUpというイベントを処理することもできます。それらのパラメータには座標が含まれます。 をクリックするためには、両方ともイベントが発生する必要があることに注意してください。また、クリック数としてカウントを考慮する必要はないため、の操作を検出することもできます。