利用VB开发CAI课件

来源:岁月联盟 作者:佚名 时间:2010-08-30

摘要  利用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 sub

4.用图形滚动条实现菜单选择
当某类机构有多个项时,使用下拉菜单选择,下拉菜单过长,操作复杂,且下拉菜单为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

图片内容