注册 登录
编程论坛 VB6论坛

在VB的picture控件里面画了1000来个圆,做颜色渐变,时间间隔30ms,如何才能不需要从新画圆

huangjunxing 发布于 2017-07-02 23:31, 1834 次点击
在VB的picture控件里面画了1000来个圆,做颜色渐变,时间间隔30ms,是不是每次都要重新新画圆,如何才能不需要从新画圆,直接填充颜色,时间快点
Private Sub Form_Load()
Dim r, x0, y0 As Long
r = 10
For x0 = 100 To 10000 Step 30
For y0 = 100 To 10000 Step 30
Picture1.Circle (x0, y0), r, vbBlue

Picture1.FillStyle = vbFSSolid
    Picture1.FillColor = vbRed
Next y0
Next x0
End Sub
2 回复
#2
风吹过b2017-07-03 10:12
你这是画点还是画圆。用你的代码全是显示 点。
你会用 PaintPicture 命令吗?

添加一个 picture2 ,要求 AutoRedrwa 设为真,宽度与 picture1 相等,高度 > 100+R*2 15

Private Sub Command1_Click()
Dim r As Long, x0 As Long, y0 As Long
r = 10
Picture1.FillStyle = vbFSSolid
Picture1.FillColor = vbRed
y0 = 100
For x0 = 100 To 10000 Step 30                   '先画一行,作为样
    Picture2.Circle (x0, y0), r, vbBlue
Next x0

For y0 = 100 To 10000 Step 30                   '按行复制,一行一行的复制,范围统统修正为加上半径
    Picture1.PaintPicture Picture2.Image, 100 - r, y0 - r, 10000 + r, 30 + r, 100 - r, 100 - r, 10000 + r, 30 + r
Next y0
End Sub

Private Sub Picture1_Paint()
'如果picture1 不启用自动重绘(AutoRedrwa)属性时,可以很大情况下加快绘图速度,但无法得到持久性图形
'这个函数为响应重绘图形,手动重绘

Dim r As Long, y0 As Long
r = 10

For y0 = 100 To 10000 Step 30                   '按行复制,一行一行的复制,范围统统修正为加上半径
    Picture1.PaintPicture Picture2.Image, 100 - r, y0 - r, 10000 + r, 30 + r, 100 - r, 100 - r, 10000 + r, 30 + r
Next y0
End Sub
#3
风吹过b2017-07-03 10:54
程序代码:
Option Explicit

Const r = 10

Private Sub Command1_Click()
'测试按钮
Picture1.Cls
Dim x0 As Long

Picture1.FillStyle = vbFSSolid
Picture1.FillColor = vbRed

For x0 = 100 To 10000 Step 30                   '先画一行,作为样
    Picture2.Circle (x0, 100), r, vbBlue
Next x0

Call Picture1_Paint
End Sub

Private Sub Picture1_Paint()
'如果picture1 不启用自动重绘(AutoRedrwa)属性时,可以很大情况下加快绘图速度,但无法得到持久性图形
'
这个函数为响应重绘图形,手动重绘

Dim y0 As Long

For y0 = 100 To 10000 Step 30                   '按行复制,一行一行的复制,范围统统修正为加上半径
    Picture1.PaintPicture Picture2.Image, 100 - r, y0 - r, 10000 + r, 30 + r, 100 - r, 100 - r, 10000 + r, 30 + r
Next y0
End Sub

Private Sub Timer1_Timer()

Const 颜色变化值 = 4
Static C As Long

'直接自加的变化
C = C + 颜色变化值
If C > &HFFFFFF Then
    C = &HFFFFFF
End If

Dim x0 As Long

Picture1.FillStyle = vbFSSolid
Picture1.FillColor = C
For x0 = 100 To 10000 Step 30                   '先画一行,作为样
    Picture2.Circle (x0, 100), r, C
Next x0

Call Picture1_Paint

End Sub
1