发信人: aaaaaaaaa()
整理人: cobe(2000-02-13 00:10:37), 站内信件
|
编者的话
====================================================================
大家好!
欢迎大家回答问题和提出问题,同时也欢迎大家
提供有关VB和VBA和ASP的好作品。
版主 冯德平
[email protected]
=============================================
VB邮件(6.26)
a Web动画图像分解在VB动画设计中的应用
武汉 任清珍 黄可
---------------------------------------------------------------------- ----------
笔者每次浏览Web网页时,总是被许多生动有趣的小动画深深吸引,十分佩服 作者的想象力和制作技巧。在使用VB进行应用软件开发设计中,为使软件的人机 界面新颖友好,总想加点动画作点缀,但又常常苦于一幅幅动画图片的绘制或寻 找!因此萌发了一种奇妙的设想:能否让Web页面上的动画在VB应用软件界面上活 起来?幸运的是,当前图像处理软件甚多,终于将笔者的这一设想变成了现实。
VB动画设计
动画的制作原理很简单:首先绘制几幅相近但又有细微变化的图片,然后每 隔一段很短的时间就依次显示其中一幅,由于人眼视觉暂留,就能看到连贯的动 画效果。 使用VB进行动画设计非常方便,因为其工具箱中有图像、图片、时钟控 件。只要获得了一幅幅动画单幅图像文件,把它们放入图像控制数组中去,便可 用时钟控件的控制属性Interval来控制每幅图片的显示间隔,把最终动画显示的 位置确定好后,按时间间隔依次从图像控制数组中取出一幅图显示。如此交替反 复显示,即可产生动画效果,编程实现比较简单。
VB动画设计所能接收的单幅图片文件的格式有四种,即*.Bmp、*.Ico、*.Wm f和*.Dib。其中*.Bmp文件的来源最广,不但可以使用Windows环境下的各种绘图 软件来绘制(但费时费力,且不是每个人都有绘画的天才),也可以使用Windows所 提供的现成的位图文件,或者用彩色扫描仪扫入等等。在此,笔者所感兴趣的则 是从Internet上Web站点网页上下载自己喜爱的动画图像文件,再经过图形软件分 解、处理成一幅幅*.Bmp图片文件,它们会给软件的人机界面带来全新的感受。
Web动画图像分解方法
从Web网页上下载静态图像文件比较简单,下载后需要进行分解。 动画图像 文件的分解是动画设计的逆过程,即把一个动画效果的图像文件分解形成它的多 幅图片文件。可使用GIF Construction Set软件打开(此软件可在许多服务器上下 载)要分解的图像文件,该软件即可将动画自动分解为多幅组成动画的单幅图画。 使用上述软件分解后,首先看看是由几幅图画组成的动画,如果有N幅图画,就 把动画文件拷贝N份。 然后,逐个打开拷贝文件对每个文件进行处理,处理过程 中只需在第一个文件中保留静止的图像,在其它文件中只保留动画图像。 最后, 使用具有图形转换功能的图形处理软件如Phtoshop,就可把得到的N个*.Gif图像 文件都转换成*.Bmp文件的格式。Web动画分解过程概括描述如下: Web动画下载 →Web动画分解(GIF Construction Set)→Web动画格式转换(Phtoshop等)。
一个实例
这是一个在数据库查询窗体上设计的眼睛转动查看的动画,此动画的每个单 幅图画就是从Web网页上下载分解得到的。 动画设计实现步骤如下: 首先,用上 述方法把Web网页上转眼睛动画下载保存、分解、格式转换成二幅画Eyesl.Bmp和 Eyes2.Bmp(此动画简单,只由二幅画组成)。 其次,将Eyes1.Bmp和Eyes2.Bmp放 入图像控制数组中。 窗体构造简单表示如下:
窗体属性表如下:
程序代码如下:
在窗体的General中声明:
Dim Rotateflag as Integer '交替显示标志
Dim Currenteyes as Integer '当前显示第几幅画
窗体装载初始化:
Sub Form_Load() Rotateflag=1 '进入显示(时钟计数开始)
Currenteyes=0 '第一幅画定位
End Sub
交替显示子程序(时钟控制显示间隔,本例为250ms):
Sub Tmrtimer_Timer()
If Rotateflag=1 Then '交替显示开始
SImgeyes.Picture=Imgeyes(Currenteyes).Picture '开始显示第一幅画
Currenteyes=Currenteyes+1 '250ms后显示下一幅
If Currenteyes=2 Then Currenteyes=0 '如果已显示了两幅,则再从第一幅显示
End If
End If
End Sub '结束
利用Web网页动画图像分解成的多个单幅图画,不但可以为VB动画设计提供方 便,也可用于VC等动画编程。目前,Internet的范围日益扩大,使Web与软件编程 联系起来,无疑提高了应用软件的制作效率和质量。
b 播放声音文件
-在 某 些 情 况 下, 例 如 程 序 员 正 在 编 写 一 个 游 戏, 或 是 将 要 进 行 一 项 非 常 冗 长 无 聊 的 过 程, 可 以 通 过 播 放 音 乐 来 增 加 游 戏 的 声 光 效 果 或 是 减 少 漫 长 的 等 待 所 带 来 的 困 倦。 本 文 介 绍 如 何 在Microsoft Visual Basic 中 对 声 音 文 件 进 行 播 放。
播 放 声 音 文 件
---- 在Microsoft Visual Basic 中 进 行 多 媒 体 音 乐 的 播 放 是 一 件 非 常 轻 松 的 事 情。 在Microsoft Windows 系 统 中 支 持 的 声 音 文 件 有WAV 文 件 和MIDI 文 件, 通 常 使 用Windows 应 用 程 序 编 程 接 口(API) 函 数mciExecute 函 数 可 以 对MIDI 文 件 进 行 播 放。 而 使 用API 函 数sndPlaySound 则 可 以 对WAV 播 放 文 件 进 行 播 放, 当 然 , 你 也 可 以 使 用mciExecute 函 数 来 播 放WAV 文 件。
---- 为 了 播 放WAV 文 件, 你 需 要 在 你 的 程 序 窗 体 的 通 用 声 明 部 分 中, 或 是 标 准 模 块 中 添 加 如 下 的 声 明 语 句:
---- Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndP laySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Lo ng
---- 以 及 如 下 的 标 识 常 量:
---- Public Const SND_SYNC = &H0
---- Public Const SND_ASYNC = &H1
---- Public Const SND_NODEFAULT = &H2
---- Public Const SND_MEMORY = &H4
---- Public Const SND_ALIAS = &H10000
---- Public Const SND_FILENAME = &H20000
---- Public Const SND_RESOURCE = &H40004
---- Public Const SND_ALIAS_ID = &H110000
---- Public Const SND_ALIAS_START = 0
---- Public Const SND_LOOP = &H8
---- Public Const SND_NOSTOP = &H10
---- Public Const SND_VALID = &H1F
---- Public Const SND_NOWAIT = &H2000
---- Public Const SND_VALIDFLAGS = &H17201F
---- Public Const SND_RESERVED = &HFF000000
---- Public Const SND_TYPE_MASK = &H170007
---- sndPlaySound 函 数 需 要 两 个 参 数, 第 一 个 参 数soundfilenam e 是 要 播 放 的WAV 文 件 的 名 称。 第 二 个 参 数 是 一 个 表 明 播 放 方 式 的 标 识 常 量, 其 定 义 的 值 如 上 所 示, 通 常 所 使 用 的 标 识 意 义 如 下:
---- SND_SYNC 播 放WAV 文 件, 播 放 完 毕 后 将 控 制 转 移 回 你 的 应 用 程 序 中。
---- SND_ASYNC 播 放WAV 文 件, 然 后 将 控 制 立 即 转 移 回 你 的 应 用 程 序 中, 而 不 管 对WAV 文 件 的 播 放 是 否 结 束。
---- SND_NODEFAULT 不 要 播 放 缺 省 的WAV 文 件, 以 免 发 生 某 些 意 外 的 错 误。
---- SND_MEMORY 播 放 以 前 已 经 加 载 到 内 存 中 的WAV 文 件。
---- SND_LOOP 循 环 播 放WAV 文 件。
---- SND_NOSTOP 在 开 始 播 放 其 它 的WAV 文 件 之 前, 需 要 完 成 对 本WAV 文 件 的 播 放。
---- 注 意:SND_LOOP 标 识 通 常 需 要 同SND_ASYNC 共 同 使 用, 也 即 在 两 个 标 识 之 间 添 加 与 播 放 符, 以 免 在 对WAV 文 件 进 行 播 放 的 时 候 将 系 统 挂 起。
---- 为 了 播 放MIDI 文 件, 你 需 要 在 你 的 程 序 窗 体 的 通 用 声 明 部 分 中, 或 是 标 准 模 块 中 添 加 如 下 的 声 明 语 句:
---- Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExe cute" (ByVal lpstrCommand As String) As Long
---- mciExecute 函 数 只 需 要 一 个 参 数,CommandString, 顾 名 思 义 , 它 是 一 个 命 令 字 符 串, 用 于 表 明 对 声 音 文 件 播 放 的 命 令, 例 如, 希 望 完 整 播 放 声 音 文 件, 则 该 字 符 串 就 是 字 符 串損lay" 加 上 声 音 文 件 的 路 径 以 及 文 件 名 称, 如 下 所 示 **
---- Dim ReturnValue As Long
---- ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID")
---- 如 果 希 望 对 声 音 文 件 的 部 分 进 行 播 放, 可 以 使 用from ...to... 语 句 格 式, 例 如 若 要 播 放CANYON.MID 文 件 的10 毫 秒 到 100 毫 秒 的 部 分, 可 以 使 用 如 下 的 语 句:
---- Dim ReturnValue As Long
---- ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID fro m 10 to 100")
---- mciExecute 函 数 也 可 以 用 来 对WAV 文 件 进 行 播 放, 方 法 同 播 放MIDI 一 样。
样 例 程 序
---- 1. 在Visual Basic 中 开 始 一 个 新 的 项 目, 采 用 缺 省 的 方 法 建 立Form1。
---- 2. 将 如 下 的 声 明 语 句 添 加 到Form1 的 通 常 声 明 部 分 中( 注 意 每 个 声 明 语 句 需 要 被 书 写 在 一 行 内):
---- Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndP laySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Lo ng
---- Const SND_SYNC = &H0
---- Const SND_ASYNC = &H1
---- Const SND_NODEFAULT = &H2
---- Const SND_MEMORY = &H4
---- Const SND_ALIAS = &H10000
---- Const SND_FILENAME = &H20000
---- Const SND_RESOURCE = &H40004
---- Const SND_ALIAS_ID = &H110000
---- Const SND_ALIAS_START = 0
---- Const SND_LOOP = &H8
---- Const SND_NOSTOP = &H10
---- Const SND_VALID = &H1F
---- Const SND_NOWAIT = &H2000
---- Const SND_VALIDFLAGS = &H17201F
---- Const SND_RESERVED = &HFF000000
---- Const SND_TYPE_MASK = &H170007
---- Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExe cute" (ByVal lpstrCommand As String) As Long
---- 3. 在Form1 上 添 加 一 个 文 本 框 控 件, 采 用 缺 省 的 方 法 建 立Text1。 将 它 的Caption 属 性 设 置 为NULL。
---- 4. 在Form1 上 添 加 一 个 命 令 按 钮 控 件, 采 用 缺 省 的 方 法 建 立Command1。 将 它 的Caption 属 性 设 置 为" 使 用sndPlaySound 函 数敗*
---- 5. 在Form1 上 添 加 一 个 命 令 按 钮 控 件, 采 用 缺 省 的 方 法 建 立Command2。 将 它 的Caption 属 性 设 置 为" 使 用mciExecute 函 数 敗*
---- 6. 将 如 下 的 代 码 添 加 到Command1 的 单 击 事 件 中:
Private Sub Command1_Click()
Dim ReturnValue As Long
Text1.Text = " 使 用sndPlaySound 函 数 播 放TADA.WAV 文 件。"
ReturnValue = sndPlaySound("C:\WIN95\MEDIA\TADA.WAV", SND_SYNC)
End Sub
---- 7. 将 如 下 的 代 码 添 加 到Command2 的 单 击 事 件 中:
Private Sub Command2_Click()
Dim ReturnValue As Long
Text1.Text = " 使 用mciExecute 函 数 播 放Canyon.mid 文 件。"
ReturnSoundValue = mciExecute
("play C:\WIN95\MEDIA\CANYON.MID from 10 to 100")
End Sub
---- 通 过 按 下F5 键 来 执 行 样 例 程 序。 单 击" 使 用sndPlaySound 函 数" 命 令 按 钮 则 使 用sndPlaySound 函 数 来 播 放C:\WIN95\MEDIA 目 录 下 面 的TADA.WAV 声 音 文 件, 如 图1。 单 击" 使 用mciExecute 函 数" 则 使 用mciExecute 函 数 来 播 放C:\WIN95\MEDIA 目 录 下 面 的CANY ON.MID 文 件 的10 毫 秒 到100 毫 秒 的 部 分, 如 图2 所 示。
c 避免装载多份应用程序
你的程序可能只支持单一用户,那么怎么来避免多用户同时使用它吗?
你可以利用 App 对象的 PrevInstance 属性来轻易达到你的目的。
我们可以在程序打开时加入以下代码来验证:
If App.PrevInstance Then
MsgBox ("程序已经运行,不能再次装载。"), vbExclamation
Unload Me
End If
=============================================
VB问答
问题部分:
回答部分:
=============================================
其它
网页在7.1日前将更新
====================================================================
欢迎订阅VB免费邮件:
订阅地址 http://server.com/WebApps/mail-list-subscribe.cgi?id=16852
====================================================================
如果您觉得这个邮件列表好的话,请告诉您的朋友。
====================================================================
欢迎投稿 [email protected]
====================================================================
网易上的主页地址:http://www4.netease.com/~aaaaaaaaa
本网站主页镜像地址:goodvbhome.yeah.net
====================================================================
-- 欢迎访问主页:goodvbhonme.yeah.net
或:http://www4.netease.com/~aaaaaaaaa
http://personal.gz168.gnet.gd.cn/vbok/
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.48.63]
|
|