AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VB编程

在VB5.0中制作多媒体界面

51自学网 http://www.wanshiok.com


 

工 程 的 运 行 和 退 出

---- 以 上 工 作 完 成 后, 可 按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 月

 
 

上一篇:Visual Basic设计多媒体应用程序  下一篇:VB中多媒体五种控制手段