vb基础   vb实例教程   api调用   控件使用   经验技巧   数据库操作   算法及技术   vb源码下载
您的位置:首页 >> vb教程 >> 经验技巧  

在VB5.0中制作多媒体界面
出处:网络

   由于VisualBasic具有易学易用、编程简洁、功能极为丰富等诸多优点,因此拥有众多用户。许多用户在运用VB编程时,都希望能用VB为自己的应用程序制作有声、有色、形式多样、引人入胜的多媒体界面。在这里我们将向大家介绍一种简单实用的多媒体界面制作方法,希望它能对大家编程起到一定的借鉴作用。

----软件中那些生动有趣的多媒体界面,往往会使用户对该软件产生深刻、良好的印象,因此,用户界面是一个应用程序非常重要的部分。因为一般情况下用户感觉不到幕后正在运行的代码,所以无论设计者花多少时间、精力来编制和优化代码,应用程序给用户的印象仍主要取决于界面的效果。

----VisualBasic5.0是微软公司最新推出的BASIC语言编程环境,它不仅具有强大的计算和数据处理能力,而且还提供了丰富的多媒体功能。利用这些多媒体功能我们就可以设计出多种多样的多媒体用户界面了。

----一般来说多媒体界面可由四部分组成:动画、声音、图象、文字。有时只有三部分:图象(或动画)、声音和文字。

----下面我们将结合一个实例来向大家介绍多媒体界面的制作方法。本例中的多媒体界面由动画、图象、背景音乐和滚动显示的文字四部分组成。

----多媒体界面显示效果描述:工程运行后,屏幕背景显示为黑色,在屏幕中间适当位置显示一幅图象,在此图象右上角适当位置连续重复播放动画,显示的文字信息从屏幕下面向上面滚动,至中间指定位置停止滚动,同时在此过程中连续播放背景音乐。具体实现方法如下。

窗体和控件的设计

----本例共需六个窗体、控件,各窗体和控件的具体设计如下:

----1.所需创建的窗体和控件.编号窗体及控件功能

1Form1窗体创建新工程,由此窗体控制界面总背景为黑色

2Picture1控件

(PictureBox控件)在此控件中显示一幅图象

3Picture2控件

(PictureBox控件)在此控件中显示播放的动画

4MCI1控件

(MMControl控件)利用此控件连续播放背景音乐

5MCI2控件

(MMControl控件)利用此控件连续播放动画

6Timer1控件利用此控件显示滚动的文字信息,并控制动画、声音的重放

----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

工程的运行和退出

----以上工作完成后,可按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窗体的尺寸(即从左上角到右下角).

----Move0,0,Screen.Width,Screen.Height'根据窗体Form1的尺寸,将控件Picture1要显示的内容调整到屏幕中间.

----x=(ScaleWidth-Picture1.Width)/2:y=(ScaleHeight-Picture1.Height)/2

----Picture1.Movex,y

----'根据控件Picture2与控件Picture1的相对位置重新定位Picture2,以确保在任何分辨

----'率下控件Picture2与控件Picture1的相对位置保持不变.

----Picture2.MovePicture2.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

[返回]

     

首页 | 设为首页 | 加入收藏 | 关于本站 | 友情链接 | 版权声明

     
 
Copyright© www.bianceng.cn Powered by 编程入门网 All Rights Reserved
吉ICP备06005558号