当前位置:编程学习 > VB >>

用VB编写FLASH动画播放器

用VB编写FLASH动画播放器
   Flash4是MacroMedia公司出品的矢量动画创作专业软件,利用该软件制作的矢量动画具有文件体积小、带音效和兼容性好等特点。那么,你想不想在自己编写的程序中加入Flash动画,为自己的程序添加一道亮丽的色彩呢?
  一、编程原理
  本程序利用了Flash4本身自带播放Flash动画的控件Swflash.ocx。你可以通过以下途径获得该控件:1、安装Flash4;2、安装Windows98自带的Flash插件,方法:依次单击“开始”菜单-“设置”-“控制面板”-“添加/删除程序”-“Windows 安装程序”-“多媒体”-“详细资料”-选中“Macromedia Shockwave Flash”前的复选框确定即可。以上方法都会将该控件安装到Windows目录下的System\Macromed\Flash子目录下。
  二、示例程序
  下面就是一个用Swflash.ocx控件编写的Flash动画播放器。本程序可一次打开多个Flash动画文件,并可在播放过程中选择播放打开的文件、随时改变播放质量、画面大小等状态;在播放过程中可以随时对播放的当前帧数进行调整或者手动进行逐帧播放,在状态栏里有当前播放状态的相关说明。在实现以上功能时,几乎用全了Swflash.ocx控件的主要属性、方法。
  编程过程如下:
  1、窗体、界面设计。
  新建工程,选择“工程”菜单下的“部件”命令,在“部件”窗口的“控件”列表中将“Shockwave flash”、“Microsoft Common Dialog Control 6.0 (SP3)”、“Microsoft Windows Common Control 6.0 (SP3)”前的复选框选中,然后确定。再在窗体中分别加入1个CommonDialog控件、1个Slider控件、3个Label控件、6个CommandButton控件和1个Status Bar控件。其中:
  将Form1的“Caption”属性设置为:Flash动画播放器。这是控制窗口。
  将CommonDialog1的CancelError设置为True,DialogTitle设置为“打开Flash动画文件”,Filter属性设置为“Flash动画(*.swf)|*.swf|”,FilterIndex设置为1,MaxFileSize设置为10240。
  将Slider1的SelectRanger的属性设置为“True”,SmallChange属性和LargeChange属性设置为10,TickFrequengcy属性设置为20,TextPosition设置为“1 - SldBelowRight”。
  将Label(1-3)分别放在Slider1下的左端、中间和右端。其中,Label1的Caption设置为“0帧”,Label2和Label3的Caption设置为空字符串。
  6个CommandButton的“名称”属性分别为:cmdOpen、cmdPlay、cmdPause、cmdPre、cmdPreFrame、cmdNextFrame、cmdNext、cmdExit,“Caption”属性分别为:打开、播放、暂停、上一个、上一帧、下一帧、下一个、退出。
  在Status Bar上单击鼠标右键,选择“属性”,从弹出的窗口中选择“窗格”页面,用鼠标点击“插入窗格”5次,在索引1-5中分别设置“文本”属性为:“共打开了0个文件”、“状态:”、“等待”、“帧数:”、“0”,再适当设置每一项的“最小宽度”的属性(可参考图1中的比例)。
    进入菜单编辑器(按快捷键Ctrl+E)。设置第一个菜单标题为“显示控制”,名称为:mnuDisplay;在“显示控制”下设立子菜单标题分别为“全部显示”、“随窗口大小变化”、“缩放至窗口大小”,名称分别为:mnuDisplay0、mnuDisplay1、mnuDisplay2。设置第二个菜单标题为“质量控制”,名称为:mnuQuality;在“质量控制”下设立子菜单标题分别为“低分辨率”、“高分辨率”,名称分别为:mnuQuality0、mnuQuality1。设置第三个菜单标题为“播放控制”,名称为:mnuPlayControl;在“播放控制”下设立子菜单标题分别为“循环播放”、“放大画面”、“缩小画面”,名称分别为:mnuLoopPlay、mnuZoomIn、mnuZoomOut。
  选择“工程”菜单下的“添加窗体”命令,新增一个窗体Form2作为播放窗口。在Form2上加入1个ShockwaveFlash控件和1个Timer控件。将Timer1控件的“Interval”属性设置为“20”。
  最后,对各窗体、控件的大小、位置进行适当的调整,其大小、位置可参考图1。
  2、程序代码
  第一步:在Form1的代码窗口中添加以下代码:
  Dim FileNames() As String 注释:用于保存打开的文件名称。
  Dim PlayFileNum As Integer 注释:用于计算正在播放的文件序号。
  Dim TotalFile As Integer 注释:用于统计打开的文件总数。
  Private Sub cmdOpen_Click() 注释:打开
  On Error GoTo ExitOpen
  CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNFileMustExist Or cdlOFNExplorer
  CommonDialog1.FileName = ″"
  CommonDialog1.ShowOpen 注释:显示“打开”对话框。
  注释:以vbNullChar作为子字符串的边界分隔字符串CommonDialog1返回的FileName。
  FileNames() = Split(CommonDialog1.FileName, vbNullChar)
  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
  Private Sub cmdPlay_Click() 注释:开始播放
  If TotalFile < 1 Then Exit Sub 注释:用户还没有打开文件。
  注释:显示Form2开始播放动画。
  Form2.Caption = FileNames(PlayFileNum) + ″ - Flash动画播放器″
  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
  Private Sub cmdPause_Click() 注释:暂停播放
  Form2!ShockwaveFlash1.Stop
  End Sub
  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
  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
  Private Sub cmdPreFrame_Click() 注释:跳到动画的上一帧
  Form2!ShockwaveFlash1.Back
  End Sub
  Private Sub cmdNextFrame_Click() 注释:跳到动画的下一帧
  Form2!ShockwaveFlash1.Forward
  End Sub
  Private Sub cmdExit_Click() 注释:退出程序
  End
  End Sub
  Private Sub Slider1_Scroll()
  注释:当用户拖动滑动条时,将播放帧数设置为滑动条中的值。
  Form2!ShockwaveFlash1.FrameNum = Slider1.Value
  End Sub
  Private Sub mnuDisplay0_Click()
  注释:将画面大小设置为在控件内保持动画原来比例全部显示
  Form2!ShockwaveFlash1.ScaleMode = 0
  mnuDisplay0.Checked = True
  mnuDisplay1.Checked = False
  mnuDisplay2.Checked = False
  End Sub
  Private Sub mnuDisplay1_Click()
  注释:将画面的缩放设置为随控件横向(或纵向)的缩放而变化
  Form2!ShockwaveFlash1.ScaleMode = 1
  mnuDisplay0.Checked = False
  mnuDisplay1.Checked = True
  mnuDisplay2.Checked = False
  End Sub
  Private Sub mnuDisplay2_Click()
  注释:将画面大小设置为不理会动画原来比例缩放至控件大小
  Form2!ShockwaveFlash1.ScaleMode = 2
  mnuDisplay0.Checked = False
  mnuDisplay1.Checked = False
  mnuDisplay2.Checked = True
  End Sub
  Private Sub mnuLoopPlay_Click()
  注释:将播放方式设置为循环或不循环。
  mnuLoopPlay.Checked = Not mnuLoopPlay.Checked
  Form2!ShockwaveFlash1.Loop = Not Form2!ShockwaveFlash1.Loop
  End Sub
  Private Sub mnuQuality0_Click()
  注释:将画面质量设置为低分辨率
  Form2!ShockwaveFlash1.Quality = 0
  mnuQuality0.Checked = True
  mnuQuality1.Checked = False
  End Sub
  Private Sub mnuQuality1_Click()
  注释:将画面质量

C:\WINNT\system32\Macromed\Flash\swflash.ocx
C:\WINNT\system32\Macromed\Flash\Flash.ocx


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
  Private Sub cmdPause_Click() 注释:暂停播放
  Form2!ShockwaveFlash1.Stop
  End Sub
  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动画播放器″
  
请教如何禁止FLASH菜单的弹出,
如果再能讲多一些VB与FLASH的通讯问题,
我直想实现一种效果,就是把透明背景的FLASH文件放在透明的窗体上得到类似于Microsft Again 的东西,或着说就是Office里的小猎咪,

  
用OLE里选FLASH

  
有控件。在控件里找带Flash的那个就是了。
转载来至网络 --------------------编程问答-------------------- 好,支持楼主 --------------------编程问答-------------------- flash和vb 之间可以数据交换  vb可以读取swf的数据 --------------------编程问答-------------------- 老掉牙的东西了…… 



现在都什么时代了,还Flash 4、Win 98 …… --------------------编程问答-------------------- 作业自己做. --------------------编程问答-------------------- 告诉你一个不幸的消息:Flash 11.0版本的控件已不支持VB6的开发。不信的话,放一个Flash控件到窗体上,你将无法保存这个VB工程。VB.net可以。 --------------------编程问答--------------------
引用 5 楼  的回复:
告诉你一个不幸的消息:Flash 11.0版本的控件已不支持VB6的开发。不信的话,放一个Flash控件到窗体上,你将无法保存这个VB工程。VB.net可以。

我还真没注意这个问题。
刚才试了下,好象从 Flash 9.0 开始就不支持 VB6了。
-_-!!!


我看得好好把以前的 Flash 7.0控件找下了…… --------------------编程问答--------------------
引用 6 楼  的回复:
引用 5 楼 的回复:

告诉你一个不幸的消息:Flash 11.0版本的控件已不支持VB6的开发。不信的话,放一个Flash控件到窗体上,你将无法保存这个VB工程。VB.net可以。

我还真没注意这个问题。
刚才试了下,好象从 Flash 9.0 开始就不支持 VB6了。
-_-!!!


我看得好好把以前的 Flash 7.0控件找下了……

Adoble可恶,逼你换最新的开发工具!
微软宣布不支持VB6了,Adoble公司响应很快!
但是有2点值得注意,希望各位程序员引起重视:
1、现有的VB工程源码文件如果是在老版本Flash.ocx下开发的,在高版本9.0以上环境下打开VB工程文件,在保存的时候可以,但要小心Flash.ocx被替换成PictureBox控件,我曾经上过当。所以,在保存VB工程的时候一定要检查Flash.ocx是否被替换成PictureBox控件?
2、虽然高版本的(9.0以上)Flash.ocx不支持添加控件到窗体上(主要是保存不了VB工程),即不支持前期绑定Flash.ocx控件。但是,可以通过程序动态添加Flash.ocx控件到窗体上,即后期绑定Flash.ocx控件,VB工程可以保存下来。
补充:VB ,  多媒体
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,