0

私が書いているプログラムでは、フォームの左上隅に絶対的なマウスの位置が必要です。私はこのコードを使用しています:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Debug.Print "x: " & X & " - y: " & Y

End Sub

このコードを使用すると、左上隅の座標が 0,0 になります。しかし問題は、フォーム内を移動すると値が 15 倍大きすぎることです。

それが私が使用した理由です:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Debug.Print "x: " & X / 15 & " - y: " & Y / 15

End Sub

これで正しい座標が得られますが、なぜこれを 15 で割る必要があるのでしょうか? このコードが他のシステムで互換性があるかどうかはわかりません。

4

2 に答える 2

5

MouseMoveのドキュメントを参照してください。返される X 値と Y 値は、"オブジェクトの ScaleHeight、ScaleWidth、ScaleLeft、および ScaleTop プロパティ" に対応します。

したがって、ScaleHeight、ScaleWidthおよびScaleLeft 、ScaleTop のドキュメントを見ると、X 座標と Y 座標の決定方法を指定できることは明らかです。Twips や Pixels に限定されませんが、任意の番号付けシステムを使用できます。

以下は、ScaleHeight、ScaleWidth ページからの引用です。

たとえば、ステートメント ScaleHeight = 100 は、フォームの実際の内側の高さの測定単位を変更します。高さが現在の n 単位 (twip、ピクセルなど) である代わりに、高さはユーザー定義の 100 単位になります。したがって、50 単位の距離はオブジェクトの高さ/幅の半分であり、101 単位の距離はオブジェクトから 1 単位ずれます。

この点に関して、結果が期待どおりであることを保証するために、含まれるユーザー定義単位の数をフォームに正確に伝えることができます。

于 2012-11-02T11:40:56.477 に答える
2

単位はTwips(実行時の変換係数:screen.TwipsPerPixelXおよびY) です。ScaleModesを使用するようにフォームを変更することもできますPixel

于 2012-11-02T11:37:57.640 に答える