-
vb教程之用VB6设计有趣的动画场景
经常看电视的朋友一定会注意到许多动画片的场面制作得非常精美,那么能不能用VB6设计类似的场面呢,答案是肯定的,下面的代码可以慢慢的画出随机形状、可以设定树枝密度的“树”,并且可以在这棵树上慢慢的“结”出指定数量的红色的“果子”——非常的有趣。
(一)编程原理
我们可以用适当宽度的line控件分别在窗体上画出“树干和树枝”,然后用shape控件画出圆圆的大小适当的“果子”,并放在“树枝”的末梢。这两个控件的颜色和大小都可以自由设置。在下面的代码中,也将展示VB6的“无中生有”动态创建控件数组的新技术。
(二)编程实践
启动VB6,建立一个标准exe工程,添加两个命令按钮COMMAND1(CAPTION=“画出一棵树”),COMMAND2(CAPTION=“显示果子”),一个标签控件(CAPTION=“树枝密度:”),和一个文本控件TEXT1(用来设置树枝数量),调整上述控件到适当位置,双击窗体,写入以下代码:
Option Explicit
Dim CreateLines As Integer
Dim Lines As Integer
Dim mLine() As Line '树枝
Dim Fruit() As Shape '果子
Dim CreateFruit As Integer
Dim Apple As Integer
Dim Evaluate As Boolean '是否已经画出了数
Dim Clear As Integer
Dim Eraser As Integer
Dim ShoWApple As Boolean '是否已经显示了果子
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '定时器
Private Sub Command1_Click() '画出树枝
If Evaluate=True Then '如果已经画出了树枝
For Clear=2 To UBound(mLine)
Set mLine(Clear)=Nothing
Set Fruit(Clear)=Nothing
Next
Controls.Remove("MotherLine")
For Eraser=2 To UBound(mLine)
Controls.Remove("linea" & Eraser)
Controls.Remove("fruta" & Eraser)
Next
End If '那么将它们清理
'否则直接按照TEXT1中设置的数量画出树枝
'树枝数量
Lines=Text1.Text
ReDim mLine(1 To Lines) '定义树枝数组
Set mLine(1)=Controls.Add("vb.line","MotherLine")
'初始化树干
With mLine(1)
.X1=Form1.ScaleWidth/2
.X2=Form1.ScaleWidth/2 '据窗体中间
.Y1=Form1.ScaleHeight
.Y2=Form1.ScaleHeight-1000 '高度比窗体小1000单位
.Visible=True '可见
.BorderWidth=8 '树干宽度8
.BorderColor=vbBlack '以黑色填充
End With
'开始画出树枝
For CreateLines=2 To Lines
Set mLine(CreateLines)=Controls.Add("Vb.line","Linea"&CreateLines)
If CreateLines Mod 2=0 Then
'向左上方画出随机的直线(树枝)
With mLine(CreateLines)
.X1=mLine(CreateLines/2).X2
.X2=(mLine(CreateLines/2).X2)-Int(Rnd*1000)
.Y1=mLine(CreateLines/2).Y2
.Y2=mLine(CreateLines/2).Y2)-Int(Rnd*1000)
.Visible=True
.BorderColor=vbGreen '以绿色填充
.BorderWidth=3 '宽度为3
End With
Else
With mLine(CreateLines)
'向右上方画出随机的直线
.X1=mLine((CreateLines-1)/2).X2
.X2=(mLine((CreateLines-1)/2).X2)+Int(Rnd*1000)
.Y1=mLine((CreateLines-1)/2).Y2
.Y2=(mLine((CreateLines-1)/2).Y2)-Int(Rnd*1000)
.Visible=True
End With
End If
DoEvents
Sleep(50) '每隔0.05秒画出并且显示一个树干
Next
ReDim Fruit(2 To Lines)
'画出每个树枝结出的果子,但是并不马上显示,直到单击了“结出果子”按钮
For CreateFruit=2 To Lines
Set Fruit(CreateFruit)=Controls.Add("vb.shape","fruta"&CreateFruit)
With Fruit(CreateFruit)
.Width=200
.Height=200 '结出果子的大小
.Left=mLine(CreateFruit).X2-100
.Top=mLine(CreateFruit).Y2-100 '结果位置
.FillColor=RGB(255,0,0) '以红色填充
.FillStyle=0 '边框类型
.Shape=3 '圆形的的果子
.ZOrder 0
End With
Next
Evaluate=True '设置树枝已经画出标志
ShoWApple=False '设置显示果子标志
Command2.Caption="显示果子" '设置结果按钮标题
End Sub
Private Sub Command2_Click() '结出果子按钮按下
On Error GoTo Erro
If ShoWApple=False Then
'如果果子没有显示,那么将它们全部显示出来
For Apple=LBound(Fruit) To UBound(Fruit)
Fruit(Apple).Visible=True
DoEvents
Sleep (50) '每隔0.05秒显示一个果子
Next
ShoWApple=True '重新设置显示果子标志
Command2.Caption="取消果子"
Else
'如果果子已经显示,那么将它们全部隐藏
For Apple=LBound(Fruit) To UBound(Fruit)
Fruit(Apple).Visible=False
Next
ShoWApple=False 重新设置显示果子标志
Command2.Caption="显示果子"
End If
Erro:
If Err.Number=9 Then
MsgBox "必须首先画出数,才能结出果子!"
End If
End Sub
Private Sub Form_Load()
Me.Caption=App.Title '添加应用程序标题
Me.Left=(Screen.Width-Me.Width)/2
Me.Top=(Screen.Height-Me.Height)/2 '窗体具中
Evaluate=False
ShoWApple=False
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
‘验证树枝数量是否为0或者1
If Text1.Text="" Or Text1.Text=1 Then
Cancel=True
MsgBox "必须输入树枝的数量!而且要大于1",vbOKOnly,"Error"
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub '代码结束
(一)编程原理
我们可以用适当宽度的line控件分别在窗体上画出“树干和树枝”,然后用shape控件画出圆圆的大小适当的“果子”,并放在“树枝”的末梢。这两个控件的颜色和大小都可以自由设置。在下面的代码中,也将展示VB6的“无中生有”动态创建控件数组的新技术。
(二)编程实践
启动VB6,建立一个标准exe工程,添加两个命令按钮COMMAND1(CAPTION=“画出一棵树”),COMMAND2(CAPTION=“显示果子”),一个标签控件(CAPTION=“树枝密度:”),和一个文本控件TEXT1(用来设置树枝数量),调整上述控件到适当位置,双击窗体,写入以下代码:
Option Explicit
Dim CreateLines As Integer
Dim Lines As Integer
Dim mLine() As Line '树枝
Dim Fruit() As Shape '果子
Dim CreateFruit As Integer
Dim Apple As Integer
Dim Evaluate As Boolean '是否已经画出了数
Dim Clear As Integer
Dim Eraser As Integer
Dim ShoWApple As Boolean '是否已经显示了果子
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '定时器
Private Sub Command1_Click() '画出树枝
If Evaluate=True Then '如果已经画出了树枝
For Clear=2 To UBound(mLine)
Set mLine(Clear)=Nothing
Set Fruit(Clear)=Nothing
Next
Controls.Remove("MotherLine")
For Eraser=2 To UBound(mLine)
Controls.Remove("linea" & Eraser)
Controls.Remove("fruta" & Eraser)
Next
End If '那么将它们清理
'否则直接按照TEXT1中设置的数量画出树枝
'树枝数量
Lines=Text1.Text
ReDim mLine(1 To Lines) '定义树枝数组
Set mLine(1)=Controls.Add("vb.line","MotherLine")
'初始化树干
With mLine(1)
.X1=Form1.ScaleWidth/2
.X2=Form1.ScaleWidth/2 '据窗体中间
.Y1=Form1.ScaleHeight
.Y2=Form1.ScaleHeight-1000 '高度比窗体小1000单位
.Visible=True '可见
.BorderWidth=8 '树干宽度8
.BorderColor=vbBlack '以黑色填充
End With
'开始画出树枝
For CreateLines=2 To Lines
Set mLine(CreateLines)=Controls.Add("Vb.line","Linea"&CreateLines)
If CreateLines Mod 2=0 Then
'向左上方画出随机的直线(树枝)
With mLine(CreateLines)
.X1=mLine(CreateLines/2).X2
.X2=(mLine(CreateLines/2).X2)-Int(Rnd*1000)
.Y1=mLine(CreateLines/2).Y2
.Y2=mLine(CreateLines/2).Y2)-Int(Rnd*1000)
.Visible=True
.BorderColor=vbGreen '以绿色填充
.BorderWidth=3 '宽度为3
End With
Else
With mLine(CreateLines)
'向右上方画出随机的直线
.X1=mLine((CreateLines-1)/2).X2
.X2=(mLine((CreateLines-1)/2).X2)+Int(Rnd*1000)
.Y1=mLine((CreateLines-1)/2).Y2
.Y2=(mLine((CreateLines-1)/2).Y2)-Int(Rnd*1000)
.Visible=True
End With
End If
DoEvents
Sleep(50) '每隔0.05秒画出并且显示一个树干
Next
ReDim Fruit(2 To Lines)
'画出每个树枝结出的果子,但是并不马上显示,直到单击了“结出果子”按钮
For CreateFruit=2 To Lines
Set Fruit(CreateFruit)=Controls.Add("vb.shape","fruta"&CreateFruit)
With Fruit(CreateFruit)
.Width=200
.Height=200 '结出果子的大小
.Left=mLine(CreateFruit).X2-100
.Top=mLine(CreateFruit).Y2-100 '结果位置
.FillColor=RGB(255,0,0) '以红色填充
.FillStyle=0 '边框类型
.Shape=3 '圆形的的果子
.ZOrder 0
End With
Next
Evaluate=True '设置树枝已经画出标志
ShoWApple=False '设置显示果子标志
Command2.Caption="显示果子" '设置结果按钮标题
End Sub
Private Sub Command2_Click() '结出果子按钮按下
On Error GoTo Erro
If ShoWApple=False Then
'如果果子没有显示,那么将它们全部显示出来
For Apple=LBound(Fruit) To UBound(Fruit)
Fruit(Apple).Visible=True
DoEvents
Sleep (50) '每隔0.05秒显示一个果子
Next
ShoWApple=True '重新设置显示果子标志
Command2.Caption="取消果子"
Else
'如果果子已经显示,那么将它们全部隐藏
For Apple=LBound(Fruit) To UBound(Fruit)
Fruit(Apple).Visible=False
Next
ShoWApple=False 重新设置显示果子标志
Command2.Caption="显示果子"
End If
Erro:
If Err.Number=9 Then
MsgBox "必须首先画出数,才能结出果子!"
End If
End Sub
Private Sub Form_Load()
Me.Caption=App.Title '添加应用程序标题
Me.Left=(Screen.Width-Me.Width)/2
Me.Top=(Screen.Height-Me.Height)/2 '窗体具中
Evaluate=False
ShoWApple=False
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
‘验证树枝数量是否为0或者1
If Text1.Text="" Or Text1.Text=1 Then
Cancel=True
MsgBox "必须输入树枝的数量!而且要大于1",vbOKOnly,"Error"
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub '代码结束
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比