工 程 的 运 行 和 退 出 ---- 以 上 工 作 完 成 后, 可 按F5 键 执 行 该 工 程, 这 时 就 可 以 看 到 如 前 所 述 的 多 媒 体 界 面 了。 当 然 也 可 以 将 该 工 程 编 译 成 可 执 行 的.EXE 文 件, 这 样 便 可 脱 离VB5.0, 在Windows95 下 直 接 运 行 了。 ---- 本 例 中 的 多 媒 体 界 面 是 循 环 连 续 播 放 的, 用 户 如 果 要 退 出 界 面, 可 随 时 在 有 背 景 图 象 的 范 围 内 按 鼠 标 左 键 即 可。 ---- 如 果 经 过 编 译 形 成 了 可 执 行 文 件, 则 本 例 应 由Demo.exe、Demo.bmp、Demo.avi 和Demo.wav 四 个 文 件 组 成。 ---- 如 果 未 编 译, 则 本 例 应 由Demo.vbp、Demo.vbm、Demo.frm、Demo.bmp、Demo.avi 和Demo.wav 六 个 文 件 组 成。 ---- 其 中Demo.bmp 是 要 显 示 的 背 景 图 形 文 件;Demo.avi 是 要 播 放 的 动 画 或 视 频 文 件;Demo.wav 是 要 播 放 的 背 景 音 乐 文 件。 设 计 者 在 选 取 这 些 文 件 时, 可 根 据 应 用 软 件 的 内 容 及 软 件 所 面 向 的 用 户 等 因 素 综 合 考 虑。 四、 小 结 ---- ( 一)、 如 何 设 计 与 屏 幕 显 示 分 辨 率 无 关 的 窗 体 和 控 件 ---- 大 家 都 知 道, 当 我 们 改 变WINDOWS 状 态 下 的 屏 幕 显 示 分 辨 率 时,Visual Basic 是 不 会 自 动 调 整 窗 体 和 控 件 尺 寸 的。 也 就 是 说 当 我 们 在 分 辨 率 为800X600 或1024X768 的 屏 幕 上 设 计 窗 体 和 控 件, 而 在 分 辨 率 为640X480 的 屏 幕 上 运 行 时, 会 发 现 有 部 分 窗 体 或 控 件 延 伸 到 了 屏 幕 的 边 界 之 外。 为 此 有 人 提 出 了 一 种 避 免 尺 寸 问 题 的 方 法: 即 在 低 分 辨 率 下( 比 如640X480) 设 计 好 窗 体 和 控 件, 这 样 便 可 在640X480、800X600、1024X768 等 方 式 下 运 行 了, 但 是 在640X480 下 设 计 的 窗 体 和 控 件, 在800X600、1024X768 方 式 下 运 行 时, 窗 体 和 控 件 虽 然 全 都 能 显 示 出 来, 但 却 都 挤 到 了 屏 幕 的 左 上 角, 使 整 个 屏 幕 显 示 的 分 布 失 调, 显 示 效 果 大 受 影 响。 下 面 我 们 就 结 合 上 例 介 绍 一 种 简 单 易 行 的、 彻 底 的 解 决 方 法。 ---- 1 . 设 置 控 件Picture1 的Width 和Height 的 属 性 值( 按 所 要 显 示 的 图 形 的 尺 寸 来 设 置). ---- 方 法 一: 用 语 句Picture1.Width 和Picture1.Height 进 行 设 置。 ---- 方 法 二: 在 控 件Picture1 的 属 性 窗 口 选 择 它 的Picture 属 性, 指 定 装 入 一 个 要 在 控 件Picture1 中 显 示 的 背 景 图 形 文 件, 此 位 图 装 入 后, 便 会 自 动 更 改Picture1.Width 和Picture1.Height 的 值。 一 旦 设 计 完 成, 请 删 除 此 位 图( 即 将 控 件Picture1 的 属 性Picture 设 为“ 无”)。 ---- 2 . 在Form_Load 事 件 代 码 中 增 加 如 下 语 句. ---- Dim x, y As Single ---- ' 根 据WINDOWS 所 设 置 的 分 辨 率 重 新 定 义Form1 窗 体 的 尺 寸( 即 从 左 上 角 到 右 下 角). ---- Move 0, 0, Screen.Width, Screen.Height ' 根 据 窗 体Form1 的 尺 寸, 将 控 件Picture1 要 显 示 的 内 容 调 整 到 屏 幕 中 间. ---- x = (ScaleWidth - Picture1.Width) / 2: y = (ScaleHeight - Picture1.Height) / 2 ---- Picture1.Move x, y ---- ' 根 据 控 件Picture2 与 控 件Picture1 的 相 对 位 置 重 新 定 位Picture2, 以 确 保 在 任 何 分 辨 ---- ' 率 下 控 件Picture2 与 控 件Picture1 的 相 对 位 置 保 持 不 变. ---- Picture2.Move Picture2.Left + x, Picture2.Top+y ---- 3 . 调 整 各 窗 体 和 控 件 的 位 置. ---- 将 控 件Picture1 调 整 到 屏 幕 的 左 上 角, 将 控 件Picture2 的 右 上 角 与 控 件Picture1 的 右 上 角 对 齐。 ---- 在 应 用 程 序 中 使 用 这 种 与 显 示 分 辨 率 无 关 的 设 计 方 法 来 设 计 窗 体 和 控 件, 可 使 用 户 在 任 何 一 种 分 辨 率 下 都 能 看 到 满 意 的 结 果, 彻 底 解 决 软 件 的 通 用 性 问 题。 ---- ( 二)、 其 它 显 示 方 式 ---- 在 上 例 中 我 们 设 计 的 文 字 信 息 是 从 下 向 上 滚 动 显 示 的, 这 是 通 过 改 变 纵 坐 标Picture1_CurrentY 实 现 的。 根 据 同 样 道 理, 我 们 可 以 让 文 字 信 息 从 上 向 下 滚 动 显 示; 也 可 将 要 显 示 的 文 字 分 成 二 部 分, 分 别 从 上、 下 二 个 方 向 向 中 间 滚 动 显 示; 也 可 通 过 改 变 横 坐 标Picture1_CurrentX 实 现 从 左、 右 二 个 方 向 向 中 间 滚 动 显 示; 还 可 做 成“ 走 马 灯” 形 式 循 环 滚 动 显 示。 ---- 一 般 的“ 走 马 灯” 循 环 滚 动 显 示 是 由PictureBox 控 件 和Label 控 件 共 同 控 制 实 现 的, 即 在PictureBox 控 件 中 粘 贴Label 控 件, 让Label 控 件 的 内 容 在PictureBox 控 件 中 进 行 显 示, 这 种 方 法 的 显 示 效 果 在 屏 幕 无 背 景 图 象 的 情 况 下 还 是 相 当 好 的! 但 是, 如 果 是 在 有 背 景 图 象 的 情 况 下 进 行 的, 那 么 情 况 就 大 不 相 同 了,“ 走 马 灯” 循 环 滚 动 显 示 成 了 这 幅 背 景 图 象 上 的 刺 眼“ 补 丁”, 无 论 你 怎 样 调 整 两 控 件,“ 补 丁” 依 然 存 在, 只 是 外 形 和 颜 色 有 些 变 化 罢 了, 这 就 使 得 整 幅 画 面 的 显 示 效 果 大 受 影 响, 为 了 解 决 这 个 问 题, 我 们 依 照 前 例 的 原 理 编 写 下 面 这 个 工 程。 实 际 使 用 表 明 效 果 很 好, 不 仅“ 走 马 灯” 循 环 滚 动 显 示 动 感 效 果 好, 而 且 还 保 持 了 原 有 画 面 的 一 致 性、 完 整 性, 彻 底 解 决“ 补 丁” 问 题。 ---- 本 例 所 需 窗 体、 控 件 及 对 各 窗 体、 控 件 所 进 行 的 属 性 设 置 与 前 例 完 全 一 样。 ---- 多 媒 体 界 面 显 示 效 果 描 述: 工 程 运 行 后, 屏 幕 背 景 显 示 为 黑 色, 在 屏 幕 中 间 适 当 位 置 显 示 一 幅 图 象, 在 此 图 象 右 上 角 适 当 位 置 连 续 重 复 播 放 动 画, 显 示 的 文 字 信 息 从 屏 幕 下 面 向 上 面 滚 动, 至 中 间 位 置 停 止 滚 动, 此 时 需 要 按“ 走 马 灯” 方 式 显 示 的 文 字 信 息 从 右 边 指 定 位 置 向 左 边 指 定 位 置 滚 动 显 示, 同 时 在 整 个 过 程 中 连 续 播 放 背 景 音 乐。 ---- 本 例 中 涉 及 到 的 事 件 仍 是 三 个, 它 们 分 别 是:Form_Load 事 件、Picture1_MouseUp 事 件 和 ---- Timer1_timer 事 件, 其 中Picture1_MouseUp 事 件 及 相 应 代 码 与 前 例 完 全 相 同,Form_Load 事 件 的 代 码 和Timer1_timer 事 件 的 代 码 作 相 应 调 整。 ---- 窗 体 的 通 用 声 明. ---- ' 与 上 例 相 比 增 加 了 对 变 量ss 的 声 明, 变 量ss 用 于 存 放 需 要 按“ 走 马 灯” 方 式 横 向 滚 动 ' 显 示 的 内 容。 Option Explicit Dim CurY, CurY1, Temp As Single, ss, s1(1 To 4), s2(1 To 4) As String
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 ss = " 横 向 滚 动 显 示 设 计 时 间:1998 年7 月6 日 " s1(4) = " 程 序 功 能:": s2(4) = "VB5.0 多 媒 体 界 面 演 示" ' 因 为 我 们 预 先 设 定 的 要 横 向 滚 动 显 示 的 字 符 串ss 的 位 置 正 是 变 量s2(3) 的 值 在 屏 ' 幕 上 的 输 出 位 置, 因 此 变 量s2(3) 的 值 应 设 为 空 字 符 串, 这 样 才 不 会 影 响 横 向 滚 ' 动 的 显 示 效 果。 S1(3) = " 设 计 时 间:": s2(3) = "" s1(2) = " 设 计 单 位:": s2(2) = " 中 国 矿 大 北 京 研 究 生 部" s1(1) = " 设 计 者:": s2(1) = " 关 永 张 杰" ' 以 下 部 分 与 上 例 相 同 CurY = Picture1.CurrentY:CurY1 = CurY:Temp = 8000 - Picture1.CurrentY DiskPathName = App.Path If Right(DiskPathName, 1) = "/" Then DiskPathName = Left(DiskPathName, Len(DiskPathName) - 1) End If Picture1.Picture = LoadPicture(DiskPathName + "/demo.bmp") Form1.BackColor = QBColor(0) MCI1.filename = DiskPathName + "/demo.wav" MCI1.Command = "Open" MCI1.Command = "Play" MCI2.DeviceType = "AVIVideo" MCI2.filename = DiskPathName + "/demo.avi" MCI2.hWndDisplay = Picture2.hWnd MCI2.Command = "Open" MCI2.Command = "Play" End Sub
Picture1_MouseUp 事 件 代 码 与 上 例 完 全 相 同.
Timer1_timer 事 件 代 码 及 注 释. 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 ' 以 上 部 分 与 上 例 相 同 If Temp > 2500 Then Picture1.Cls For I = 1 To 4 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 Else ' 当 要 纵 向 滚 动 显 示 的 文 字 信 息 到 达 预 定 位 置 后, 字 符 串ss 开 始 横 向 循 环 滚 动 显 示。 Picture1.Cls For I = 1 To 4 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 ' 设 定 字 符 串ss 开 始 横 向 循 环 滚 动 显 示 的 起 始 位 置, 即“ 走 马 灯” 方 式 的 左 边 界。 Picture1.CurrentX = 3400: Picture1.CurrentY = 3000 ' 每 次 取 出 字 符 串ss 中 的 第 一 个 字 符, 然 后 把 它 加 到 字 符 串ss 的 尾 部, 以 便 形 成 ' 一 个 向 前 滚 动 字 符 串。 Ss = Mid$(ss, 2, Len(ss) - 1) + Mid$(ss, 1, 1) Picture1.Print Mid$(ss, 1, 10) ' 每 次 在 屏 幕 上 滚 动 显 示 出 来 的 字 符 串 End If End Sub
---- 真 诚 希 望 本 文 能 对 大 家 制 作 多 媒 体 界 面 有 些 帮 助。 参 考 文 献 ---- 1 .Visual Basic 5.0 程 序 员 指 南 科 学 出 版 社 1998 年 月1 月 ---- 2 .Visual Basic 5.0 语 言 参 考 手 册 科 学 出 版 社 1998 年 月1 月 ---- 3 .Visual Basic 5.0 Active X 参 考 手 册 科 学 出 版 社 1998 年 月1 月  
2/2 首页 上一页 1 2 |