📄 9917.txt
字号:
===========================================================
《编 程 技 术》
一份属于广大编程爱好者的电子杂志
这是一份完全关于探讨编程的免费电子杂志
您可以任意传播本刊,但必须保持它的完整
本刊承诺绝不向订户发送任何形式的垃圾邮件!
===========================================================
第17期 99/07/18 本期发送数: 2479
===========================================================
◆本期栏目◆
*刊首语*
*技术文档*
Visual Basic动画编程技术
用VB制作常居上层的浮动工具箱
用VB实现浮动按钮
VC++中使程序自动运行
利用PowerBuilder调用拨号网络
在Visual FoxPro 5.0中激活Internet Explorer
VFP中的表单和菜单为何一闪而过?
C++与Java语言及其开发工具
*有问必答*
***********************************************************
***********************************************************
◆刊首语◆
本刊从本期开始略有改变,首先是扩容了(大家鼓掌),原来
杂志的容量总是在20k到30k之间飘忽不定,现在正式定在40k,这样
每期将可以提供更多的文章和信息给大家了,这也是来回报所有喜
爱和关心本刊的朋友。
从本期开始,正式加入PowerBuilder编程语言的内容,有人曾
把PowerBuilder比作是最有“钱”途的编程语言,既然它是编程语
言家族的,也为了大家的“钱”途,那就让它加入吧。另外今后也
会适当加入javascript网页编程的内容。
另外杂志扩容了,我想除了多刊登一些文章外,再搞一个类似
于论坛性质的讨论栏目,搞一些有关编程方面的话题供大家一齐探
讨。具体如何搞以及什么话题还望大家给我一点建议。
最后我还要感谢大家,自从上一期我发出重视“疑难杂症”栏
目的呼吁后,没想到收到了很好的效果,上一期的问题几乎全部得
到了解答,真的很感谢这么多热心的朋友,其实,这也是我要扩容
杂志的一个主要原因。既然现在既有问也有答了,那么干脆就改名
为“有问必答”吧。还望大家多多关心哦!
***********************************************************
***********************************************************
◆技术文档◆
Visual Basic动画编程技术
周长发
在Visual Basic中利用Image和Timer控件能很方便地实现动画。本文将介绍
Visual Basic动画编程的基本原理和实现三种不同类型动画的编程技术。
一、 基本原理
动画是一种运动的模拟,其实现方法是在屏幕上快速地显示一组相关的图象。
因此实现动画的基础是图象的显示和使图象快速、定时地移动或变化。
在Visual Basic中,用LoadPicture函数将BMP、ICO和WMF格式的图象文件
装入内存,并将函数返回值赋予Image对象的Picture属性,便能在Image对
象中显示图象。使图象移动或变化的基本方法有三种,即:
1. 用Image对象的Move方法移动图象,其Left和Top属性指示了Image对象
的当前左上角位置;
2. 调用LoadPicture函数装载不同的图象,并赋给Image对象的Picture属
性,将在对象中显示不同的图象,即实现图象变化;
3. 修改Image对象的Width和/或Height属性可以缩放图象。
使用Timer控件可以实现定时控制。Timer对象的Interval属性设置了定时间
隔,即调用Timer事件过程的时间间隔。在Timer事件过程中处理控制Image
对象的移动或变化,便能实现动画。Timer对象的Interval值决定了动画的
变化或移动速度,其单位是毫秒(1/1000秒)。
Timer对象的Enabled属性决定了Timer事件是否有效。设置Enabled属性为
True将启动Timer事件(如启动动画);为False则将使Timer事件无效(如
停止动画)。
二、 无位移动画
无位移动画是指动画对象不移动,但图象不断变化,其典型例子是翻书。实
现无位移动画的方法是,设置好Image对象和Timer对象后,在Timer事件过
程中调用调用LoadPicture函数装载不同的图象,并赋予Image对象的Picture
属性,使对象中显示不同的图象,即实现图象变化。
下面是翻书动画的例子。程序启动时,在窗体中显示一本翻开的书,用鼠标
左键点击书,则将开始翻书;再用鼠标左键点击书,则书将停止翻动。位图
文件book1.bmp~ book4.bmp分别表现了翻书时,正在翻的书页的不同位置,
它们存放在当前工程所在的目录中。
在需显示动画的窗体(Form1)中设置Image对象Image1和Timer对象Timer1,
并按下表设置它们的属性,未列出的属性使用缺省值。
对象
属性
设置值
Image1
Picture
...(工程文件所处路径)\Book1.bmp
Timer1
Enabled
False
Interval
150
程序代码如下:
Option Explicit ‘变量必须先定义,才能使用
Dim ImageNo% ‘当前的位图编号
Dim IsPlaying As Boolean ‘动画是否启动
Private Sub Form_Load()
IsPlaying = False ‘开始时,动画未启动
Image1.ToolTipText = "开始" ‘鼠标移到书上时,将出现“开始”提示
ImageNo% = 1 ‘动画从book1.bmp开始
End Sub
Private Sub Image1_Click() ‘用鼠标左键点击了书
If IsPlaying Then ‘动画已启动,则停止
IsPlaying = False
Timer1.Enabled = IsPlaying
Image1.ToolTipText = "开始"
Else ‘动画未启动,则启动
IsPlaying = True
Timer1.Enabled = IsPlaying
Image1.ToolTipText = "停止"‘鼠标移到书上时,将出现“停止”提示
End If
End Sub
Private Sub Timer1_Timer() ‘Timer事件
ImageNo% = ImageNo% + 1 ‘动画下一帧
If ImageNo% > 4 Then ‘如果动画已到最后一帧,则
ImageNo% = 1 ‘再从第一帧开始
End If
'在Image对象中显示动画的当前帧
Image1.Picture = LoadPicture(App.Path & "\book" & ImageNo% & ".bmp")
End Sub
代码中App.Path指定了当前应用程序所在的路径。
三、 单帧位移动画
单帧位移动画,是指同一幅图象的位置不断变化而形成的动画,其典型实例
时云彩被风吹动。编制单帧位移动画的方法是在Timer事件过程中调用Image
对象的Move方法来移动图象。
下面是云彩移动的例子。程序启动时,在窗体中显示一朵云,用鼠标左键点
击云,则云彩将开始飘动,如碰到窗体的边界,云彩将改变移动方向;再用
鼠标左键点击云,则云将停止移动。位图文件cloud.bmp存放在当前工程所
在的目录中。
在需显示动画的窗体(Form1)中设置Image对象Image1和Timer对象Timer1,
并按下表设置它们的属性,未列出的属性使用缺省值。
对象
属性
设置值
Image1
Picture
...(工程文件所处路径)\Cloud.bmp
Timer1
Enabled
False
Interval
150
程序代码如下:
Option Explicit ‘变量必须先定义,才能使用
Dim IsPlaying As Boolean ‘动画是否启动
Dim DetaX%, DetaY% ‘沿X、Y轴的移动位置增量
Private Sub Form_Load()
IsPlaying = False ‘开始时,动画未启动
Image1.ToolTipText = "开始" ‘鼠标移到书上时,将出现“开始”提示
DetaX% = 100 ‘沿X轴的移动位置增量为100单位
DetaY% = 100 ‘沿Y轴的移动位置增量为100单位
End Sub
Private Sub Image1_Click() ‘用鼠标左键点击了书
If IsPlaying Then ‘动画已启动,则停止
IsPlaying = False
Timer1.Enabled = IsPlaying
Image1.ToolTipText = "开始"
Else ‘动画未启动,则启动
IsPlaying = True
Timer1.Enabled = IsPlaying
Image1.ToolTipText = "停止"
End If
End Sub
Private Sub Timer1_Timer() ‘Timer事件
‘移动Image对象
Image1.Move Image1.Left + DetaX%, Image1.Top + DetaY%
‘碰到边界,则校正位置,并反向
If Image1.Left + Image1.Width >= Form1.Width Then ‘碰到右边界
Image1.Move Form1.Width - Image1.Width, Image1.Top
DetaX% = -DetaX%
ElseIf Image1.Top + Image1.Height >= Form1.Height Then‘碰到上边界
Image1.Move Image1.Left, Form1.Height - Image1.Height
DetaY% = -DetaY%
ElseIf Image1.Left <= 0 Then ‘碰到左边界
Image1.Move 0, Image1.Top
DetaX% = -DetaX%
ElseIf Image1.Top <= 0 Then ‘碰到下边界
Image1.Move Image1.Left, 0
DetaY% = -DetaY%
End If
End Sub
注意,云彩碰到边界而反向移动,是通过改变DetaX%、 DetaY%的符号来实现的。
四、 多帧位移动画
多帧位移动画是最复杂的动画,综合了无位移动画和单帧位移动画的特点。自然
界的运动大多数都具有多帧位移的特点,如小鸟的飞翔,在小鸟位置的移动的同
时,其翅膀也在扇动。实现多帧位移动画需要在Timer事件过程中同时处理Image
对象的图象更替和位置移动。
下面是小鸟飞翔的例子。程序启动时,在窗体中显示一只小鸟,用鼠标左键点击
它,则小鸟将开始扇翅飞翔,如碰到窗体的边界,小鸟将改变飞翔方向;再用鼠
标左键点击小鸟,则小鸟将停止飞翔。位图文件bird1.bmp~ bird4.bmp分别表
现了小鸟飞翔时,其翅膀的不同位置,它们存放在当前工程所在的目录中。
在需显示动画的窗体(Form1)中设置Image对象Image1和Timer对象Timer1,
并按下表设置它们的属性,未列出的属性使用缺省值。
对象
属性
设置值
Image1
Picture
...(工程文件所处路径)\Bird1.bmp
Timer1
Enabled
False
Interval
150
程序代码如下:
Option Explicit ‘变量必须先定义,才能使用
Dim ImageNo% ‘当前的位图编号
Dim IsPlaying As Boolean ‘动画是否启动
Dim DetaX%, DetaY% ‘沿X、Y轴的移动位置增量
Private Sub Form_Load()
IsPlaying = False
Image1.ToolTipText = "开始"
ImageNo% = 1
DetaX% = 100
DetaY% = 100
End Sub
Private Sub Image1_Click()
If IsPlaying Then
IsPlaying = False
Timer1.Enabled = IsPlaying
Image1.ToolTipText = "开始"
Else
IsPlaying = True
Timer1.Enabled = IsPlaying
Image1.ToolTipText = "停止"
End If
End Sub
Private Sub Timer1_Timer() ‘Timer事件
ImageNo% = ImageNo% + 1 ‘动画下一帧
If ImageNo% > 4 Then ‘如果动画已到最后一帧,则
ImageNo% = 1 ‘再从第一帧开始
End If
'在Image对象中显示动画的当前帧
Image1.Picture = LoadPicture(App.Path & "\bird" & ImageNo% & ".bmp")
‘移动Image对象
Image1.Move Image1.Left + DetaX%, Image1.Top + DetaY%
‘碰到边界,则校正位置,并反向
If Image1.Left + Image1.Width >= Form1.Width Then ‘碰到右边界
Image1.Move Form1.Width - Image1.Width, Image1.Top
DetaX% = -DetaX%
ElseIf Image1.Top + Image1.Height >= Form1.Height Then ‘碰到上边界
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -