第五天、Flash动画播放器
小蘑菇:叮当姐姐,上次你教我做媒体播放器之后不是让我自己做一个Flash动画的播放器吗?但是我始终没有搞定,还是你来帮帮忙吧。
小叮当:咦,现在怎么变得谦虚起来了?既然是这样,就由我出马搞定吧。
一、准备工作
小叮当:制作Flash动画播放器的时候需要调用一个Flash控件---Swflash.ocx,这个控件可以通过安装Flash,或者通过安装Windows 98自带的Flash插件来搞定。比如采取后一种方法,只要在控制面板中选择“添加/删除程序”图标,进入“Windows 安装程序”界面之后在“多媒体”一项中点选“Macromedia Shockwave Flash”前的复选框确定即可。
小蘑菇:不用这么麻烦吧,其实我的计算机中已经安装过Flash了,还用它制作过一些动画呢。
小叮当:切,你不早说?浪费我这么多口水。不过即使已经安装了Flash,也要用鼠标右击工具箱,并在弹出的部件添加窗口中选把Shockwave flash、MICroSOFt Common Dialog Control 6.0 (SP3)和Microsoft Windows Common Control 6.0 (SP3)这三个控件添加到工具箱中。完成这一步设置后,就可以开始制作Flash动画播放器了。
二、制作Flash播放器
小叮当:咱们制作的这个Flash动画播放器要能够一次打开多个Flash动画文件,可以在播放过程中选择播放打开的文件、随时改变播放质量、画面大小等状态,而且在播放过程中可以随时对播放的当前帧数进行调整或者手动进行逐帧播放,在状态栏里有当前播放状态的相关说明等等。下面先来添加程序所需要的控件。
1、新建一个工程,将Form1的Caption属性设置为“小叮当的Flash动画播放器”。
2、在Form1窗口中添加一个CommonDialog控件,将CommonDialog1控件的CANcelError设置为“True”,DialogTitle设置为“打开Flash动画文件”,FiLTEr属性设置为“Flash动画(*.swf)|*.swf|”,FilterIndex设置为“1”,MaxFileSize设置为“10240”。
3、在Form1窗口中添加一个Slider控件,将Slider1的SeleCTRanger的属性设置为“True”,SmallChange属性和LargeChange属性均设置为“10”,TickFrequengcy属性设置为“20”,TextPosition设置为“1-SldBelowRight”。
4、在Form1窗口中添加3个Label控件,并将Label1的Caption设置为“0帧”,Label2和Label3的Caption设置为空字符串。
5、在Form1窗口中添加8个CommandButton控件,将它们的名称属性分别设置为“cmdOpen”、“cmdPlay”、“cmdPause”、“cmdPre”、“cmdPreFrame”、“cmdNextFrame”、“cmdNext”和“cmdExit”,Caption属性分别设置为“打开”、“播放”、“暂停”、“上一个”、“上一帧”、“下一帧”、“下一个”和“退出”。
6、在Form1窗口中添加一个Status Bar控件,在这个控件上单击鼠标右键并选择“属性”命令,从弹出的窗口中选择“窗格”标签,用鼠标点击“插入窗格”5次表示插入5个状态窗格,在索引1-5中分别设置“文本”属性分别为“共打开了0个文件”、“状态:”、“等待”、“帧数:”、“0”。
7、接着按下“Ctrl+E”的组合按键进入菜单编辑器,设置第一个菜单标题为“显示控制”,名称为mnuDisplay。在“显示控制”菜单下分别设立“全部显示”、“随窗口大小变化”和“缩放至窗口大小”子菜单标题,名称分别为:mnuDisplay0、mnuDisplay1和mnuDisplay2。设置第二个菜单标题为“质量控制”,名称为mnuQuality。在“质量控制”菜单下分别设立“低分辨率”和“高分辨率”的子菜单,名称分别为mnuQuality0和mnuQuality1。设置第三个菜单标题为“播放控制”,名称为mnuPlayControl。在“播放控制”菜单下分别设立“循环播放”、“放大画面”和“缩小画面”子菜单,名称分别为mnuLoopPlay、mnuZoomIn和mnuZoomOut。
8、选择“工程”菜单下的“添加窗体”命令,新增一个窗口Form2作为播放窗口。在Form2上加入1个ShockwaveFlash控件和1个Timer控件,将Timer1控件的Interval属性设置为“20”。
最后,对各窗体、控件的大小和位置进行适当的调整,
小蘑菇:乖乖,看来这次是玩真的了,又是控件又是菜单,还有一个播放窗口,厉害。
小叮当:下面就来针对Form1进行代码添加。
1、双击Form1窗口,并选择“通用”对象,输入下面的通用代码:
Dim FileNames() As String /用于保存打开的文件名称
Dim PlayFileNum As Integer /用于计算正在播放的文件序号
Dim TotalFile As Integer /用于统计打开的文件总数
2、双击“打开”按钮并输入下列代码:
Private Sub cmdOpen_Click()
On Error GoTo ExitOpen
CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNFileMustExist Or cdlOFNExplorer
CommonDialog1.FileName = " "
CommonDialog1.ShowOpen /显示“打开”对话框。
FileNames() = Split(CommonDialog1.FileName, vbNullChar) /以vbNullChar作为子字符串的边界分隔字符串CommonDialog1返回的FileName
If UBound(FileNames) = 0 Then /只打开了一个文件
Form2!ShockwaveFlash1.Movie = FileNames(0)
TotalFile = 1
PlayFileNum = 0
Else /打开了多于一个文件
Form2!ShockwaveFlash1.Movie = FileNames(0) + ″\″ + FileNames(1)
TotalFile = UBound(FileNames)
PlayFileNum = 1
End If
StatusBar1.Panels(1).Text = ″共打开了″ + Trim(Str(TotalFile)) + ″个文件″
cmdPlay_Click
ExitOpen:
End Sub
3、双击“播放”按钮并输入下列代码:
Private Sub cmdPlay_Click()
If TotalFile < 1 Then Exit Sub /还没有打开文件。
Form2.Caption = FileNames(PlayFileNum) + "- 小叮当的Flash动画播放器" /显示Form2开始播放动画
Form2.Show
Form2!ShockwaveFlash1.Playing = True
If TotalFile = 1 Then PlayFileNum = 0
StatusBar1.Panels(3).Text = "正在播放文件:" + FileNames(PlayFileNum) + " …" /显示状态条的信息
Slider1.Max = Form2!ShockwaveFlash1.TotalFrames /显示滑动条的状态
Label2.Caption = Str(Slider1.Max / 2) + "帧"
Label3.Caption = Str(Slider1.Max) + "帧"
End Sub
4、双击“暂停”按钮并输入下列代码:
Private Sub cmdPause_Click()
Form2!ShockwaveFlash1.Stop
End Sub
5、双击“上一个”按钮并输入下列代码:
Private Sub cmdPre_Click()
If TotalFile <> 1 Then /打开多个文件时
PlayFileNum = PlayFileNum - 1
If PlayFileNum < 1 Then PlayFileNum = TotalFile
Form2!ShockwaveFlash1.Movie = FileNames(0) + "\" + FileNames(PlayFileNum)
End If
StatusBar1.Panels(3).Text = "正在播放文件:" + FileNames(PlayFileNum) + "…" /显示播放状态的信息
Slider1.Max = Form2!ShockwaveFlash1.TotalFrames
Form2.Caption = FileNames(PlayFileNum) + "- 小叮当的Flash动画播放器"
Label2.Caption = Str(Slider1.Max / 2) + "帧"
Label3.Caption = Str(Slider1.Max) + "帧"
End Sub
6、双击“下一个”按钮并输入下列代码:
Private Sub cmdNext_Click()
If TotalFile <> 1 Then /打开多于一个文件时
PlayFileNum = PlayFileNum + 1
If PlayFileNum>TotalFile Then PlayFileNum = 1
Form2!ShockwaveFlash1.Movie = FileNames(0) + "\" + FileNames(PlayFileNum)
End If
StatusBar1.Panels(3).Text = "正在播放文件:" + FileNames(PlayFileNum) + " …" /显示播放状态的信息
Slider1.Max = Form2!ShockwaveFlash1.TotalFrames
Form2.Caption = FileNames(PlayFileNum) + "- 小叮当的Flash动画播放器"
Label2.Caption = Str(Slider1.Max / 2) + "帧"
Label3.Caption = Str(Slider1.Max) + "帧"
End Sub
7、双击“上一帧”按钮并输入下列代码:
Private Sub cmdPreFrame_Click()
Form2!ShockwaveFlash1.Back /跳到动画的上一帧
End Sub
8、双击“下一帧”按钮并输入下列代码:
Private Sub cmdNextFrame_Click()
Form2!ShockwaveFlash1.Forward /跳到动画的下一帧
End Sub
9、双击“退出”按钮并输入下列代码:
Private Sub cmdExit_Click()
End
End Sub
10、在Form1窗口中选择“Slider1”对象的“Scroll”事件,并输入下面的通用代码:
Private Sub Slider1_Scroll()
Form2!ShockwaveFlash1.FrameNum = Slider1.Value /当用户拖动滑动条时,将播放帧数设置为滑动条中的值
End Sub
11、选择“显示控制”菜单中的“全部显示”命令,并输入下列代码:
Private Sub mnuDisplay0_Click()
Form2!ShockwaveFlash1.ScaleMode = 0 /将画面大小设置为在控件内保持动画原来比例全部显示
mnuDisplay0.Checked = True
mnuDisplay1.Checked = False
mnuDisplay2.Checked = False
End Sub
12、选择“显控制”菜单中的“随窗口大小变化”命令,并输入下列代码:
Private Sub mnuDisplay1_Click()
Form2!ShockwaveFlash1.ScaleMode = 1 /将画面的缩放设置为随控件横向(或纵向)的缩放而变化
mnuDisplay0.Checked = False
mnuDisplay1.Checked = True
mnuDisplay2.Checked = False
End Sub
13、选择“显示控制”菜单中的“缩放至窗口大小”命令,并输入下列代码:
Private Sub mnuDisplay2_Click()
Form2!ShockwaveFlash1.ScaleMode = 2 /将画面大小设置为不理会动画原来比例缩放至控件大小
mnuDisplay0.Checked = False
mnuDisplay1.Checked = False
mnuDisplay2.Checked = True
End Sub
14、选择“播放控制”菜单中的“循环播放”命令,并输入下列代码:
Private Sub mnuLoopPlay_Click()
mnuLoopPlay.Checked = Not mnuLoopPlay.Checked /将播放方式设置为循环或不循环
Form2!ShockwaveFlash1.Loop = Not Form2!ShockwaveFlash1.Loop
End Sub
15、选择“播放控制”菜单中的“放大画面”命令,并输入下列代码:
Private Sub mnuZoomIn_Click()
Form2!ShockwaveFlash1.Zoom (50) /放大画面
End Sub
16、选择“播放控制”菜单中的“缩小画面”命令,并输入下列代码:
Private Sub mnuZoomOut_Click()
Form2!ShockwaveFlash1.Zoom (200) /缩小画面
End Sub
17、选择“质量控制”菜单中的“低分辨率”命令,并输入下列代码:
Private Sub mnuQuality0_Click()
Form2!ShockwaveFlash1.Quality = 0 /将画面质量设置为低分辨率
mnuQuality0.Checked = True
mnuQuality1.Checked = False
End Sub
18、选择“质量控制”菜单中的“高分辨率”命令,并输入下列代码:
Private Sub mnuQuality1_Click()
Form2!ShockwaveFlash1.Quality = 1 /将画面质量设置为高分辨率
mnuQuality0.Checked = False
mnuQuality1.Checked = True
End Sub
小蘑菇:虽然源程序繁琐了一些,但都挺简单的呢。那么Form2的源代码呢?
小叮当:Form2的代码就简单一些了。
1、双击Form2窗口,选择“Resize”并输入下列代码:
Private Sub Form_Resize()
ShockwaveFlash1.Top = Form2.ScaleTop /将ShockwaveFlash1控件的大小设置为Form2的大小
ShockwaveFlash1.Left = Form2.ScaleLeft
ShockwaveFlash1.Width = Form2.ScaleWidth
ShockwaveFlash1.Height = Form2.ScaleHeight
End Sub
2、双击Timer1控件并输入下列代码:
Private Sub Timer1_Timer()
Form1!StatusBar1.Panels(5).Text = Str(ShockwaveFlash1.FrameNum) /在状态栏和滑动条上显示当前播放的帧
Form1!Slider1.Value = ShockwaveFlash1.FrameNum
End Sub
3、双击Form2窗口,选择“Unload”事件并输入下列代码:
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
到此为止,所有的代码就全部OK了,你可以试着运行一下看看怎么样?
小蘑菇:呵呵,载入一个Flash动画试试,效果还不错,就是界面有些丑陋了。
小叮当:少来了,就这一小会儿功夫,我能给你作出来就不错了,你还和我唧唧歪歪的?
小蘑菇:我不是这个意思呀,我是想说这么短的时间能够做出来真是了不起,如果再多一些时间的话,一定可以做成一个非常非常漂亮的界面。
小叮当:你这小子,嘴巴转的倒是挺快的呢。行了,又可以拿这个程序去同学面前炫耀了吧,那你自己好好看看,我可要去忙我的了。