投稿日 | : 2003/10/22(Wed) 10:45 |
投稿者 | : おじん |
URL | : |
タイトル | : LINE文で環状の絵を描くとき |
PictureBoxに、「横8の字」を描いたり消したりするとき、
1、「消す」ステップで、右の環の重なる部分は消さないようにしたい。
2、描く早さをもっと早くしたい。(ソース参照。Stepを大きくすると
環が縞縞になり思わしくありません。
3、このようなことをしたい場合、タに方法があれば。
文字で説明しにくいので以下に「ソース」を置きます。時間に余裕のある方
よろしくヒントをご教授ください。
準備は、FormにPictureBoxを一つ置いてください。
起動はPictureBoxをクリックします。描く・消すを2回繰り返すと
終わりです。
'------------------------------------------------
Option Explicit
'時間測定用(現在未使用)
' Private Declare Function timeGetTime _
Lib "winmm.dll" () As Long
Dim r, w, t, x1, y1, x2, y2, pi
Dim sp '描画スピード
Dim backColr As Long '背景色
Dim ringColr As Long '線の色
Dim rw 'リングの太さ
'------------------------------------------------
Private Sub Form_Load()
WindowState = 2
Picture1.Top = 0
Picture1.Left = 0
Picture1.ScaleMode = vbPixels
Picture1.BackColor = vbWhite
' Label1.BackColor = vbWhite
' Label1.Caption = "経過時間(秒)"
rw = 100 'リングの太さ
sp = 0.00004
backColr = vbWhite
ringColr = vbBlack
End Sub
Private Sub Form_Resize()
Picture1.Width = Form1.ScaleWidth
Picture1.Height = Form1.ScaleHeight
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload Me
End
End Sub
'------------------------------------------------
Private Sub Picture1_Click()
Dim r, w, n
' Dim st As Long 'タイム用
Dim color As Long '描画色
r = rw '半径
w = rw * 0.4 'ドーナツ部分の幅
' st = timeGetTime
pi = 3.141592
Picture1.Scale (-240, 180)-(240, -180)
For n = 1 To 4 '画→消→画→消
If n Mod 2 = 1 Then
color = ringColr '描画
Else
color = backColr '消去
End If
For t = 0.5 * pi To 2.5 * pi Step sp
x1 = Sin(t) * (r - w) - r + w / 2
y1 = Cos(t) * (r - w)
x2 = Sin(t) * r - r + w / 2
y2 = Cos(t) * r
Picture1.Line (x1, y1)-(x2, y2), color
' DoEvents
' Label1 = CStr((timeGetTime - st) / 1000)
Next t
For t = 1.5 * pi To -0.5 * pi Step -sp
x1 = Sin(t) * (r - w) + r - w / 2
y1 = Cos(t) * (r - w)
x2 = Sin(t) * r + r - w / 2
y2 = Cos(t) * r
Picture1.Line (x1, y1)-(x2, y2), color
' DoEvents
' Label1 = CStr((timeGetTime - st) / 1000)
Next t
Next n
End Sub
'------------------------------------------------