VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/07/12(Thu) 08:27
投稿者y4yama
Eメール
URL
タイトルRe: フリーハンドで描いたオブジェクトを選択したか?判定したい

こんちは
AutoRedraw=Trueだと、Line()で描く線は前のが残るし・・・大変そうですね
花ちゃんさんのアドバイスにもあるように、座標を覚えておいて計算するのが楽でいいです

テストコードを載せておきます。オブジェクトを選択したか?に的を絞ったはなしですが
Picture1の中に、Line1 という線をあらかじめデザインで作っておいて下さい
Line1の始点付近をLクリックして、ドラッグしたら、Line1の始点が移動できます

Dim sx, sy
Dim flag

Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If dist(X, Y, Line1) < 14 Then
    flag = True
    sx = X: sy = Y
End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If flag = True Then
            Line1.X1 = Line1.X1 + X - sx
            Line1.Y1 = Line1.Y1 + Y - sy
           ' Line1.X2 = Line1.X2 + X - sx
           ' Line1.Y2 = Line1.Y2 + Y - sy
            sx = X: sy = Y
    End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    flag = False
End Sub

Function dist(X As Single, Y As Single, L1 As Line)
    dist = Sqr((X - L1.X1) * (X - L1.X1) + (Y - L1.Y1) * (Y - L1.Y1))
End Function

Line1のどこでもHitするようには、
点と線の距離を計算して、更に、線の始点と終点の間に点がある、という計算をするだけです。2Dの距離計算は、ネットでさがしてください
参考になれば・・・いいのですが・・・フリーハンドで描いた・・となると数百点を記録することになるんでしょうかねぇ〜


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -