---- 软 件 中 那 些 生 动 有 趣 的 多 媒 体 界 面, 往 往 会 使 用 户 对 该 软 件 产 生 深 刻、 良 好 的 印 象, 因 此, 用 户 界 面 是 一 个 应 用 程 序 非 常 重 要 的 部 分。 因 为 一 般 情 况 下 用 户 感 觉 不 到 幕 后 正 在 运 行 的 代 码, 所 以 无 论 设 计 者 花 多 少 时 间、 精 力 来 编 制 和 优 化 代 码, 应 用 程 序 给 用 户 的 印 象 仍 主 要 取 决 于 界 面 的 效 果。
---- Visual Basic 5.0 是 微 软 公 司 最 新 推 出 的BASIC 语 言 编 程 环 境, 它 不 仅 具 有 强 大 的 计 算 和 数 据 处 理 能 力, 而 且 还 提 供 了 丰 富 的 多 媒 体 功 能。 利 用 这 些 多 媒 体 功 能 我 们 就 可 以 设 计 出 多 种 多 样 的 多 媒 体 用 户 界 面 了。
---- 一 般 来 说 多 媒 体 界 面 可 由 四 部 分 组 成: 动 画、 声 音、 图 象、 文 字。 有 时 只 有 三 部 分: 图 象( 或 动 画)、 声 音 和 文 字。
---- 下 面 我 们 将 结 合 一 个 实 例 来 向 大 家 介 绍 多 媒 体 界 面 的 制 作 方 法。 本 例 中 的 多 媒 体 界 面 由 动 画、 图 象、 背 景 音 乐 和 滚 动 显 示 的 文 字 四 部 分 组 成。
---- 多 媒 体 界 面 显 示 效 果 描 述: 工 程 运 行 后, 屏 幕 背 景 显 示 为 黑 色, 在 屏 幕 中 间 适 当 位 置 显 示 一 幅 图 象, 在 此 图 象 右 上 角 适 当 位 置 连 续 重 复 播 放 动 画, 显 示 的 文 字 信 息 从 屏 幕 下 面 向 上 面 滚 动, 至 中 间 指 定 位 置 停 止 滚 动, 同 时 在 此 过 程 中 连 续 播 放 背 景 音 乐。 具 体 实 现 方 法 如 下。
窗 体 和 控 件 的 设 计
---- 本 例 共 需 六 个 窗 体、 控 件, 各 窗 体 和 控 件 的 具 体 设 计 如 下:---- 1 . 所 需 创 建 的 窗 体 和 控 件.
编 号 | 窗 体 及 控 件 | 功 能 |
1 | Form1 窗 体 | 创 建 新 工 程, 由 此 窗 体 控 制 界 面 总 背 景 为 黑 色 |
2 | Picture1 控 件 (PictureBox 控 件) |
在 此 控 件 中 显 示 一 幅 图 象 |
3 | Picture2 控 件 (PictureBox 控 件) |
在 此 控 件 中 显 示 播 放 的 动 画 |
4 | MCI1 控 件 (MMControl 控 件) |
利 用 此 控 件 连 续 播 放 背 景 音 乐 |
5 | MCI2 控 件 (MMControl 控 件) |
利 用 此 控 件 连 续 播 放 动 画 |
6 | Timer1 控 件 | 利 用 此 控 件 显 示 滚 动 的 文 字 信 息, 并 控 制 动 画、 声 音 的 重 放 |
---- 2 . 设 置 各 窗 体 和 控 件 的 属 性.
----
窗 体 及 控 件 | 属 性 | 设 置 值 | 含 义 |
Form1 窗 体 | BorderStyle | 0-None | 不 显 示Windows95 的 边 框 及 边 框 相 关 元 素. |
WindowState | 2-Maximized | 在 运 行 时, 将 窗 体 的 可 视 窗 口 最 大 化. | |
Picture1 控 件 | Appearance | 0-Flat | 设 置 控 件 的 显 示 风 格 为 平 面 视 觉 效 果. |
AutoRedraw | True | 允 许 自 动 重 绘 控 件 上 的 图 象、 文 字( 若 此 项 设 为False, 则 屏 幕 显 示 文 字 有 闪 烁 感). | |
AutoSize | True | 自 动 调 整 控 件 大 小 以 显 示 全 部 要 显 示 内 容. | |
Font | 楷 体-GB2312 | 显 示 字 体: 楷 体, 样 式:Regular, 大 小:1 号 . | |
Picture2 控 件 | AutoSize | True | 自 动 调 整 控 件 大 小 以 显 示 全 部 要 显 示 内 容. |
MCI1 控 件 | ( 名 称) | MCI1 | 重 新 给MMControl 控 件 命 名. |
Visible | False | 将 控 件 隐 藏 起 来, 由 程 序 去 控 制 播 放. | |
MCI2 控 件 | ( 名 称) | MCI2 | 重 新 给MMControl 控 件 命 名. |
Visible | False | 将 控 件 隐 藏 起 来, 由 程 序 去 控 制 播 放. | |
Timer1 控 件 | Interval | 200 | 设 置 每 隔0.2 秒 发 生 一 次Timer1-timer 事 件, 当 然 此 项 设 置 也 可 在 事 件 代 码 中 用 语 句 Timer1.Interval = 200 来 设 定. |
---- 注: 表 中 未 列 出 的 各 窗 体 和 控 件 的 属 性 值 维 持 原 窗 体 和 控 件 创 建 时 的 缺 省 值。
---- 4 . 调 整 各 窗 体 和 控 件 的 尺 寸, 并 将 各 窗 体 和 控 件 调 整 到 适 当 位 置.
事 件 及 相 应 代 码 的 设 计
---- 本 例 中 涉 及 到 的 事 件 有 三 个, 它 们 分 别 是:Form_Load 事 件、Picture1_MouseUp 事 件 和Timer1_timer 事 件。 其 中Form_Load 事 件 主 要 完 成 对 数 组 及 变 量 进 行 初 始 化, 对 所 要 读 取 文 件 的 盘 符 路 径 进 行 处 理, 并 控 制 多 媒 体 控 件MCI1、MCI2 分 别 播 放 背 景 音 乐 和 动 画;Picture1_MouseUp 事 件 主 要 完 成 关 闭、 退 出 工 程 的 任 务, 即 在 工 程 运 行 时, 当 鼠 标 处 于 画 面Picture1 范 围 内 时, 按 鼠 标 左 键, 则 关 闭 多 媒 体 控 件MCI1、MCI2, 并 卸 载 退 出 工 程;Timer1_timer 事 件 主 要 用 来 完 成 背 景 音 乐 和 动 画 的 连 续 循 环 重 放, 并 控 制 要 显 示 的 文 字 信 息 向 上 滚 动 显 示。 窗 体 的 声 明 及 各 事 件 的 代 码 分 别 如 下:---- 1 . 窗 体 的 通 用 声 明.
Option Explicit ' 强 制 进 行 变 量 声 明.
Dim CurY, CurY1, Temp As Single, s1(1 To 3), s2(1 To 3) As String
---- 2 . Form_Load 事 件 代 码 及 注 释.
Private Sub Form_Load()
' 变 量DiskPathName 用 于 存 放 应 用 程 序
所 在 的 盘 符 和 路 径.
Dim DiskPathName As String, x, y As Single
' 根 据WINDOWS 所 设 置 的 分 辨 率 重
新 调 整 各 窗 口 和 控 件 的 位 置.
Move 0, 0, Screen.Width, Screen.Height
x = (ScaleWidth - Picture1.Width) / 2:
y = (ScaleHeight - Picture1.Height) / 2
Picture1.Move x, y
Picture2.Move Picture2.Left + x, Picture2.Top+y
s1(3) = " 程 序 功 能:": s2(3) =
"VB5.0 多 媒 体 界 面 演 示" ' 要 滚 动 显 示 的 文 字 信 息.
S1(2) = " 设 计 单 位:": s2(2) = " 中 国 矿 大 北 京 研 究 生 部"
s1(1) = " 设 计 者:": s2(1) = " 关 永 张 杰"
' 保 存Picture1 画 面 的 起 始 坐 标.
CurY = Picture1.CurrentY: CurY1 = CurY: Temp = 8000 - Picture1.CurrentY
DiskPathName = App.Path
' 判 断 应 用 程 序 所 在 路 径 是 否 为 根 目 录,
若 为 根 目 录 则 去 掉 路 径 中 的 "\" .
' 例 如 当 应 用 程 序 处 于A 盘 根 目 录 时,
字 符 串 表 达 式DiskPathName + "\demo.bmp" 的
' 值 为"a:\\demo.bmp", 即 路 径 中 出 现 二 个 反 斜 杠,
这 是 不 允 许 的。
If Right(DiskPathName, 1) = "\" Then
DiskPathName = Left(DiskPathName, Len(DiskPathName) - 1)
End If
Picture1.Picture = LoadPicture(DiskPathName + "\demo.bmp")
' 装 入 要 显 示 的 图 象.
Form1.BackColor = QBColor(0)
' 设 置Form1 的 背 景 为 黑 色.
MCI1.filename = DiskPathName + "\demo.wav"
' 打 开 并 播 放 背 景 音 乐.
MCI1.Command = "Open"
MCI1.Command = "Play"
MCI2.DeviceType = "AVIVideo"
' 打 开 并 播 放 动 画.
MCI2.filename = DiskPathName + "\demo.avi"
MCI2.hWndDisplay = Picture2.hWnd
' 让 动 画 在Picture2 中 进 行 播 放.
MCI2.Command = "Open"
MCI2.Command = "Play"
End Sub
---- 3 . Picture1_MouseUp 事 件 代 码 及 注 释.
---- Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) ' 判 断 是 否 按 下 了 鼠 标 的 左 键, 是 则 关 闭 多 媒 体 控 件MCI1、MCI2, 并 卸 载 退 出 工 程.
If Button = vbLeftButton Then
MCI1.Command = "Stop"
MCI1.Command = "Close"
MCI2.Command = "Stop"
MCI2.Command = "Close"
Unload Me
End If
End Sub
---- 4 .Timer1_timer 事 件 代 码 及 注 释.
---- 实 现 文 字 信 息 向 上 滚 动 显 示 的 方 法: 首 先 在 屏 幕 最 下 向 显 示 要 显 示 的 文 字 信 息, 然 后 等 待Timer1_timer 事 件 发 生( 由 于 本 例 中Timer1 控 件 的Interval 属 性 被 设 为200, 所 以 每 隔0.2 秒 就 会 发 生 一 次Timer1_timer 事 件), 每 发 生 一 次 该 事 件, 我 们 就 用Picture1.Cls 命 令 清 除 上 一 次 屏 幕 显 示 文 字 内 容, 再 向 上 调 整 本 屏 要 显 示 内 容 的 起 始 纵 坐 标( 横 坐 标 不 变), 接 着 显 示 本 屏 内 容, 依 此 类 推, 直 至 所 要 显 示 的 文 字 信 息 移 动 到 中 间 指 定 位 置 为 止, 从 而 形 成 一 种 滚 动 的 视 觉 效 果。
---- 关 于 滚 动 显 示 的 速 度, 我 们 可 以 通 过 改 变Timer1 控 件 的Interval 属 性 的 值 加 以 控 制,Interval 属 性 的 值 越 小, 则 滚 动 显 示 的 速 度 越 快; 反 之 则 越 慢。 当 然 也 可 以 通 过 改 变CurY1 的 值( 即 改 变 两 屏 间 文 字 的 纵 坐 标 差) 来 改 变 显 示 速 度, 但 是 后 者 所 能 调 整 的 范 围 是 有 限 的。
Private Sub Timer1_Timer()
Dim I As Integer
' 保 存 本 屏 要 显 示 文 字 信 息 的 起 始 纵 坐 标,
以 便 能 对 下 一 屏 要 显 示 内 容 进 行 准 确 定 位。
CurY = CurY1
If MCI1.Mode = mciModeStop Then
' 如 背 景 音 乐 播 放 完 毕, 则 继 续 重 复 播 放。
MCI1.From = 0
MCI1.Command = "Play"
End If
If MCI2.Mode = mciModeStop Then
' 如 动 画 播 放 完 毕, 则 继 续 重 复 播 放。
MCI2.From = 0
MCI2.Command = "Play"
End If
' 变 量Temp 的 值 应 根 据 所 显 示 的 背 景 图 象
的 大 小 和 要 显 示 的 文 字 信 息 量 及 文 字 的 显
' 示 位 置 来 进 行 选 取。
If Temp > 3000 Then
' 停 止 向 上 滚 动 显 示 的 条 件。
Picture1.Cls
' 清 除Picture1 画 面 的 文 字 信 息。
For I = 1 To 3
' 用Picture1.CurrentY 来 设 定Picture1.Print 语 句
所 要 输 出 内 容 的 纵 坐 标。
Picture1.CurrentY = 8000 - CurY
Temp = Picture1.CurrentY
' 设 置 要 显 示 文 字 的 颜 色 为 粉 色.
Picture1.ForeColor = QBColor(13): Picture1.Print " "; s1(I); " ";
' 设 置 要 显 示 文 字 的 颜 色 为 绿 色.
Picture1.ForeColor = QBColor(10): Picture1.Print s2(I)
' 设 置 要 显 示 文 字 的 行 间 距.
CurY = CurY + 800
Next I
' 改 变 下 一 屏 要 显 示 文 字 的 起 始 纵 坐 标,
即 两 屏 间 文 字 的 纵 坐 标 差。
CurY1 = CurY1 + 200
End If
End Sub