|
こんにちわ。
>頂点の移動の際に任意の場所で止めたり、再開したりしたい
Waitでは特定のプロシージャ内で実行が一時停止されるだけです。
任意に停止/再開を繰り替えすんやったら、一旦プロシージャを抜けるようにして、
フラグで判定すればええんとちゃいまっか?
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Triangle As Shape
Private CurrentPos As Single
Private Flg As Boolean
Sub 三角形の描画()
If Not Flg Then
図の削除
With ActiveSheet.Shapes
With .BuildFreeform(msoEditingAuto, 200, 200)
.AddNodes msoSegmentLine, msoEditingAuto, 340, 100
.AddNodes msoSegmentLine, msoEditingAuto, 400, 200
.AddNodes msoSegmentLine, msoEditingAuto, 200, 200
Set Triangle = .ConvertToShape
End With
With Triangle
.Fill.Visible = msoFalse
.Fill.ForeColor.RGB = vbRed
.Line.DashStyle = msoLineDash
End With
DoEvents
Sleep 1000
.AddLine(50, 200, 600, 200).Line.DashStyle = msoLineDashDot
.AddLine(50, 100, 600, 100).Line.DashStyle = msoLineDashDot
.AddLine 200, 200, 400, 200
End With
CurrentPos = 0
End If
End Sub
Sub 移動開始()
If Not Flg Then
Flg = True
CurrentPos = 頂点の移動(CurrentPos)
End If
End Sub
Function 頂点の移動(ByVal Counter As Long) As Long
Dim i As Long
With Triangle
With .Nodes
For i = Counter To 250 Step 2
If Flg Then
If Counter = 250 Then Flg = False
.SetPosition 2, 340 + i, 100
DoEvents
Sleep 100
Else
頂点の移動 = i
Exit Function
End If
Next
End With
.Fill.Visible = msoTrue
.Line.DashStyle = msoLineSolid
End With
Flg = False
頂点の移動 = 0
End Function
Sub 頂点を元に戻す()
If Not Flg Then
With Triangle
.Nodes.SetPosition 2, 340, 100
.Fill.Visible = msoFalse
.Line.DashStyle = msoLineDash
End With
CurrentPos = 0
DoEvents
End If
End Sub
Sub 図の削除()
On Error Resume Next
If Not Flg Then
ActiveSheet.Lines.Delete
Triangle.Delete
Set Triangle = Nothing
CurrentPos = 0
Flg = False
End If
End Sub
Sub 一時停止()
If Flg Then Flg = False
End Sub
「移動開始」で変形を開始して、「一時停止」でストップ。
再開はもう一度「移動開始」です。
試してみてな。
ほな。
|
|