摘要 利用VB编写多媒体课件,主要解决动画、声音、图片、文本的显示、播放与控制等问题,本文介绍一些有关的编程技巧和关键技术。
关键词 VB 多媒体 课件
Visual Basic采用面对对象的程序设计思想,且继承了Basic简单易学的特点, 功能强大被很多课件的开发者所青睐,它和许多课件开发平台相比,具有更好的灵活性,可以充分的实现开发者的意图,是开发多媒体程序的利器,下面是我用 Visual Basic 编写课件的一点经验。
1.播放FLC动画
FLC动画是表示物理量之间的联接关系及运动关系有利工具,我采用vbplay.vbx控件播放动画。
使用该控件,必须有aaplay.dll文件同时存在。
①播放动画前判断是否有动画文件,有则播放:
if dir("文件名.flc")<>"" then
animation1.animation="文件名.flc"
animation1.visible=true
endif
②为了看清物理量某一状态,动画需要在某一帧暂停:
Private Sub pausebtn_Click()
If animation1.Pause Then
animation1.Pause = False
Else
animation1.Pause = True
End If
End Sub
③ 动画向前退一帧:
Private Sub back_Click()
animation1.PositionFrame = animation1.PositionFrame - 1
End Sub
2.声音的播放
为了使用者更好的理解并撑握软件所讲知识,增强学习效果,声音解说在多媒体课件中起着十分重要的作用。声音可用windows的录音机录制。是否声音播放可由使用者控制,也可实现声音的暂停。下面是利用MCI控件实现声音的播放。
Public Const mci_mode_close As Integer = 524
Public Const mci_mode_play As Integer = 526
Public Const mci_mode_pause As Integer = 529
Private Sub sound_Click()
'如果声音正在播放则暂停或继续播放
If (Not MMControl1.Mode = mci_mode_pause) And (MMControl1.Mode = mci_mode_play) Then
MMControl1.Command = "pause"
Else
'播放解说词
MMControl1.DeviceType = "WaveAudio"
MMControl1.filename = "文件名.wav"
MMControl1.Shareable = False
MMControl1.UpdateInterval = 50
MMControl1.Notify = True
MMControl1.Command = "open"
MMControl1.Command = "prev"
MMControl1.Command = "play"
End If
End Sub
'========================================================
'如果解说已播放结束,则关闭媒体播放器
Private Sub MMControl1_Done(NotifyCode As Integer)
If MMControl1.Position = MMControl1.Length Then
MMControl1.Command = "close"
End If
End Sub
3.图形按钮编程实现
虽然VB提供了标准的Windows按钮,但在多媒体课件中使用带指示声音的图形按钮发挥多媒体计算机的优点,使程序界面更美观,操作更方便,大大的提高多媒体课件的教学效果。
①先用photonshop作三个图片,代表按钮的三种状态,并命名为move.bmp,normal..bmp,down.bmp,用 windows下的录音机录制二个声音文件,命名为:mover.wav,down.wav 。
②利用API函数播放声音,函数定义如下:
#If Win32 Then
Declare Function playsound Lib "WinMN" (ByVal SoundName As String, ByVal handle As Integer, ByVal Flags As Long) As Integer
#Else
Declare Function playsound Lib "MMSystem" (ByVal SoundName As String, ByVal handle As Integer, ByVal Flags As Long) As Integer
#End If
Public Const snd_nodefault = &H2
Public Const snd_sync = &O0
Public Const snd_filename = &H20000
③在窗体上画picture控件,picture1.autosize=true,picture1.borderstyle设置为0-none,picture1.picture设置为normal.bmp。
④编程如下:
'============================================================
'当光标在窗体中时,按钮处于正常状态
Private Sub Form1_MouseMove()
picture1.picture=loadpicture("normal.bmp")
mark=false
End Sub
'============================================================
'当光标在按钮上移动时,按钮处于激活状态,且播放声音 mover.wav
Private Sub Picture1_MouseMove()
if mark then
picture1.picture=loadpicture("move.bmp")
playsound "mover.wav",0,snd_sync or snd_nodefault or snd_filename
mark =true
end if
end sub
'============================================================
'当鼠标右键按下时,按钮处于按下状态
Private Sub Picture1_MouseDown()
picture1.picture=loadpicture("down.bmp")
end sub
'=========================================================
当鼠标右键弹起时,按钮处于激活状态
Private Sub Picture1_MouseUp()
picture1.picture=loadpicture("move.bmp")
end sub
'==========================================================
'单击按钮时,播放down.wav
Private Sub Picture1_Click()
playsound "down.wav",0,snd_sync or snd_nodefault or snd_filename
end sub4.用图形滚动条实现菜单选择
当某类机构有多个项时,使用下拉菜单选择,下拉菜单过长,操作复杂,且下拉菜单为windows95方式,影响程序美观。为此,我采用图形滚动条实现菜单选择,作法如下。
①用photonshop作一小BMP图,用来表示滚动条中的滑块,取名为hk.bmp。
②在窗体中放一lable控件,设置属性borderdtyle为1-Fixed single,backstyle为0-transparent,caption为空,适当调节lable的高度及宽度,name为Lable1。
③在窗体中紧挨Lable1放置一sspanell控件,调节其高度及宽度与Lable1的高度宽度相等,bevellnner为1-inset,bevellouter为0-none,bevellwidth=1,borderwidth=0,name为sspanell1。
④在sspanell1中放置一picture控件,将borderstyle设置为0-none,调节其宽度及高度为适当值,并在其中放置要选取择的项(用lable控件或imager控件表示),命名为picture1。
⑤在lable1中放image控件,设置picture为hk.bmp,borderstyle为1-fixed single,调节其高度及宽度。
⑥程序如下:
'======================================================================
'当鼠标右键在滚动条的滑块上按下时,将标志置为真
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
vscroll_m = True
End Sub
'=======================================================================
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'滑块可移动范围
temp1 = lable1.height+lable.top-image1.height '上限
temp2 = lable1.top期 '下限
If vscroll_m Then
top_m = Image1.Top + Y
If top_m > temp1 Then
top_m =temp1
ElseIf top_m < temp2 Then
top_m = temp2
End If
'移动滑块
Image1.Top = top_m
'计算滑块移动后,对应的菜单区应移动的距离
Picture1.Top = -(top_m -temp2 ) *picture1.height/lable1.height
End If
End Sub
'=======================================================================
'当鼠标右键在滚动条的滑块上弹起时,将标志置为假
Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
vscroll_m = False
End Sub