遅い→起動時

http://d.hatena.ne.jp/pmint/

模範解答

d:id:pmint:20080226:p2の関連記事。


はいヽ(´ー`)ノ「模範解答」

何かをする模範的コード(Visual Basic)
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   8535
   ClientLeft      =   105
   ClientTop       =   390
   ClientWidth     =   10275
   LinkTopic       =   "Form1"
   ScaleHeight     =   15.055
   ScaleMode       =   7  'センチメートル
   ScaleWidth      =   18.124
   StartUpPosition =   3  'Windows の既定値
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Option Explicit

Private Sub Form_Paint()
    Dim intX As Integer, intY As Integer, lngColor As Long
    Dim intPX(3) As Integer, intPY(3) As Integer
    Dim intX0 As Integer, intX1 As Integer, intY0 As Integer, intY1 As Integer, intProcX0 As Integer, intProcY0 As Integer, intProcX1 As Integer, intProcY1 As Integer
    Dim intOldX As Integer, intOldY As Integer, intTime As Integer
    Dim IntIndex As Integer
    Me.DrawWidth = 1
    For intX = 0 To 1000 Step 1
        lngColor = IIf((intX Mod 100 = 0), RGB(160, 160, 160), RGB(224, 224, 224))
        Me.Line (intX, 0)-(intX, 1000), lngColor
    Next intX
    For intY = 0 To 1000 Step 1
        lngColor = IIf((intY Mod 100 = 0), RGB(160, 160, 160), RGB(224, 224, 224))
        Me.Line (0, intY)-(1000, intY), lngColor
    Next intY
    Me.Line (0, 200)-(1000, 200), RGB(96, 96, 96)
    Me.Line (200, 0)-(200, 1000), RGB(96, 96, 96)

        intPX(0) = 2: intPY(0) = 2
        intPX(1) = 3: intPY(1) = 4
        intPX(2) = 6: intPY(2) = 3
        intPX(3) = 7: intPY(3) = 1
    Me.DrawWidth = 7
    For IntIndex = 0 To 3 Step 1
        Me.PSet (intPX(IntIndex), intPY(IntIndex)), vbBlue
    Next IntIndex
    Me.DrawWidth = 1
    Me.Line (intPX(1), intPY(1))-(intPX(2), intPY(2)), vbBlue
        intX0 = intPX(1): intY0 = intPY(1)
        intX1 = intPX(2): intY1 = intPY(2)
        intProcX0 = (intPX(2) - intPX(0)) / 2: intProcY0 = (intPY(2) - intPY(0)) / 2
        intProcX1 = (intPX(3) - intPX(1)) / 2: intProcY1 = (intPY(3) - intPY(1)) / 2
    
    intX = 0: intY = 0
    For intTime = 0 To 3 Step 0.1
        intOldX = intX
        intOldY = intY
        intX = (2 * intX0 - 2 * intX1 + intProcX0 + intProcX1) * (intTime ^ 3) + (-3 * intX0 + 3 * intX1 - 2 * intProcX0 - intProcX1) * (intTime ^ 2) + intProcX0 * intTime + intX0
        intY = (2 * intY0 - 2 * intY1 + intProcY0 + intProcY1) * (intTime ^ 3) + (-3 * intY0 + 3 * intY1 - 2 * intProcY0 - intProcY1) * (intTime ^ 2) + intProcY0 * intTime + intY0
        If Not ((intOldX = 0 And intOldY = 0) Or (intX = 0 And intY = 0)) Then
            Me.DrawWidth = 3
            Me.PSet (intX, intY), vbRed
            Me.DrawWidth = 1
            Me.Line (intOldX, intOldY)-(intX, intY), vbBlack
        End If
    Next intTime
End Sub