フォームでクリックの座標を計算するには?

解決


クッキー  2006-03-01 03:15:10  No: 130476

フォームを左クリック、右クリックしたときの座標を計算し表示させようと思っているのですが、うまくできません。
______________________________
    Dim XR As Long
    Dim YR As Long
    Dim XL As Long
    Dim YL As Long
_________________________
 Private Sub Form1_Mousedown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        If e.Button = MouseButtons.Left Then
            XL = Cursor.Position.X
            YL = Cursor.Position.Y
        End If

    End Sub
_____________________________
 Private Sub Form1_Mousedown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        If e.Button = MouseButtons.Right Then

            XR = Cursor.Position.X
            YR = Cursor.Position.Y
        End If

    End Sub
_____________________________
 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Xpoint As Long
        Dim Ypoint As Long
        Xpoint = XL - XR
        Ypoint = YL - YR

        MsgBox(Xpoint, Ypoint)

    End Sub

End Class


魔界の仮面弁士  2006-03-01 03:39:06  No: 130477

> Dim XR As Long
マウス座標なら、Integer で充分なのでは。

> Private Sub Form1_Mousedown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
『MouseUp イベント』のプロシージャ名を
『Form1_Mousedown』にするのは、如何なものかと。
(そもそも、Form1_Mousedown という名前が被っていますし)

>   XL = Cursor.Position.X
e.X ではなく、Cursor.Position.X の方が必要なのですね。

> MsgBox(Xpoint, Ypoint)
う〜ん。第2引数に Ypoint を指定してはマズイと思いますよ。

> うまくできません。
どういう結果を期待して、実際にはどうなってしまうのでしょうか?


クッキー  2006-03-01 03:49:58  No: 130478

本当だ^^;
まちがってました。
左クリックした座標から右クリックした座標を引いたものを
定期的にメッセージボックスに表現したいと思っています。
「ポンッ、ポンッ」って感じです。
________________________
    Dim XR As Long
    Dim YR As Long
    Dim XL As Long
    Dim YL As Long
______________________
Private Sub Form1_Mousedown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        If e.Button = MouseButtons.Left Then

            XL = Cursor.Position.X
            YL = Cursor.Position.Y
        End If

    End Sub
____________________
 Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        If e.Button = MouseButtons.Right Then

            XR = Cursor.Position.X
            YR = Cursor.Position.Y
        End If

    End Sub
______________________
  Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Xpoint As Long
        Dim Ypoint As Long
        Xpoint = XL - XR
        Ypoint = YL - YR

        MsgBox(Xpoint, Ypoint)

    End Sub

End Class


クッキー  2006-03-01 04:18:28  No: 130479

タイマーのところをこっちに変えたほうが、メッセージボックスが邪魔にならなかったです^^
例えばこれを、フォーム以外の他のウインドウ上で行いたい場合は、デバイスコンテキストを取得して、そのデバイスコンテキストに対しておこなうのでしょうか?

__________

 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Xpoint As Long
        Dim Ypoint As Long
        Xpoint = XL - XR
        Ypoint = YL - YR

        Label1.Text = (Xpoint)
        Label2.Text = (Ypoint)

    End Sub

End Class


特攻隊長まるるう  2006-03-01 05:10:14  No: 130480

>例えばこれを、フォーム以外の他のウインドウ上で行いたい場合は、
最初の質問と内容が違います。

魔界の仮面弁士さんが指摘したコードでフォーム上でクリックした
座標が正常に処理されてるなら、まずその報告をしてください。
で、質問としては解決したのですからスレッドを閉じ、別の質問は
新しいスレッドで行ってください。共通する内容だと思う場合は
このスレッドのアドレスを質問文に含めてください。

>> うまくできません。
>どういう結果を期待して、実際にはどうなってしまうのでしょうか?
どういう結果が得られたのか?解決した内容はあるのか?
どういう結果を期待して、実際にはどうなってしまうのか?
伝える気が無いという事は解決しようと思ってないのですよね?


クッキー  2006-03-01 18:33:59  No: 130481

しつれいなことをし、申し訳ございませんでした。

結果としまして、フォーム内を左クリック、右クリックすることにより、フォーム内のラベルに左クリックの座標から右クリックの座標を引いたものを表示することが出来ました。

表示できなかった原因として、設置したタイマーのEnabledがTrueになってなかったのが原因と思います。基本的な知識なく、みなさんに迷惑をかけてしまい、申し訳ございません。

次はデバイスコンテキストについて聞きたいと思っていますので、新たにスレッドを作り質問したいと思います。

みなさん、いろいろとお答えを頂きありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加