VB6.0 マウスイベント ファイル出力を限定するには?

解決


  2007-09-21 21:31:44  No: 137569

shape1(正方形)の中からshape2(正方形)の中へ向かって直線を引き、
その間にかかった時間を"time.csv"というファイルに出力したいと思っています。

しかし、下記のプログラムのままだとマウスポインタがshape2(正方形)の中に到達するまでに
誤ってマウスの右ボタンを離してしまう(MouseUp)とそこで計測が終わってしまい、
その時間がファイルに出力されてしまいます。
このような場合の時間をファイルに出力されないようにするにはどうすればよいでしょうか?
(shape2(正方形)の中までしっかりと直線が引かれた場合の時間だけを出力したい。)

Option Explicit

Dim DrawFlag As Boolean        '(General)の(Dealaration)で宣言

Dim startTime As Long
Dim endTime As Long

Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub Form_Load()
    Open "time.csv" For Output As #1
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
                             X As Single, Y As Single)
                             
    DrawFlag = True              'マウスダウンでTrueに設定
    PSet (X, Y), RGB(0, 0, 255)  '初期位置

    startTime = timeGetTime

End Sub

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

    If DrawFlag Then                   'DrawFlagがTrueのとき
        Line -(X, Y), RGB(0, 0, 255)   '現在位置から(x,y)位置に直線を描く
    
    End If
End Sub
                             
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
                            X As Single, Y As Single)
                             
    DrawFlag = False

    endTime = timeGetTime
    Label1.Caption = (endTime - startTime) / 1000
    
    Write #1, CSng(Label1.Caption)
    
End Sub


特攻隊長まるるう  2007-09-21 21:43:55  No: 137570

MouseUpでX,Yがshape2(正方形)の座標と重なってるか
判定すればいいだけでは?

Top Left Height Width の値から分かるでしょ?


  2007-09-22 01:02:23  No: 137571

回答ありがとうございます。

その判定の仕方、記述を教えて下さい。


特攻隊長まるるう  2007-09-22 01:46:15  No: 137572

>その判定の仕方、記述を教えて下さい。
いや、ふつーに考えて(^^;
Y が Top と Top + Height の間にある、かつ
X が Left と Left + Width の間にある
になるものではないの?

図形の内部にある点って中学校の数学で習わなかったっけ?


  2007-09-22 06:06:37  No: 137573

回答ありがとうございます。


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

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






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