简 介: 由 于Visual Basic 具 有 易 学 易 用、 编 程 简 洁、 功 能 极 为 丰 富 等 诸 多 优 点, 因 此 拥 有 众 多 用 户。 许 多 用 户 在 运 用VB 编 程 时, 都 希 望 能 用VB 为 自 己 的 应 用 程 序 制 作 有 声、 有 色、 形 式 多 样、 引 人 入 胜 的 多 媒 体 界 面。 在 这 里 我 们 将 向 大 家 介 绍 一 种 简 单 实 用 的 多 媒 体 界 面 制 作 方 法, 希 望 它 能 对 大 家 编 程 起 到 一 定 的 借 鉴 作 用。 ---- 软 件 中 那 些 生 动 有 趣 的 多 媒 体 界 面, 往 往 会 使 用 户 对 该 软 件 产 生 深 刻、 良 好 的 印 象, 因 此, 用 户 界 面 是 一 个 应 用 程 序 非 常 重 要 的 部 分。 因 为 一 般 情 况 下 用 户 感 觉 不 到 幕 后 正 在 运 行 的 代 码, 所 以 无 论 设 计 者 花 多 少 时 间、 精 力 来 编 制 和 优 化 代 码, 应 用 程 序 给 用 户 的 印 象 仍 主 要 取 决 于 界 面 的 效 果。 ---- 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 <  
1/2 1 2 下一页 尾页 |