投稿時間: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 '------------------------------------------------
|