[リストへもどる]
一括表示

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

投稿時間:2003/10/22(Wed) 16:58
投稿者名:batchman
Eメール:
URL :
タイトル:
Re: LINE文で環状の絵を描くとき
> 2、描く早さをもっと早くしたい。(ソース参照。Stepを大きくすると
> 環が縞縞になり思わしくありません。

とりあえず2だけ...

Stepの値を大きくする(描画する回数を減らす)ときは、Picture1.DrawWidthの値も大きくしましょう...
変数はなるべく型の宣言もしましょう。型を省略するとVariant型にされ遅くなります。

#Stepの値を大きくしてPicture1.DrawWidthの値も大きくしたら劇的に早くなりました^^;