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
MouseUpでX,Yがshape2(正方形)の座標と重なってるか
判定すればいいだけでは?
Top Left Height Width の値から分かるでしょ?
回答ありがとうございます。
その判定の仕方、記述を教えて下さい。
>その判定の仕方、記述を教えて下さい。
いや、ふつーに考えて(^^;
Y が Top と Top + Height の間にある、かつ
X が Left と Left + Width の間にある
になるものではないの?
図形の内部にある点って中学校の数学で習わなかったっけ?
回答ありがとうございます。
ツイート | ![]() |