注册 登录
Office中国论坛/Access中国论坛 返回首页

的个人空间 http://www.office-cn.net/?0 [收藏] [复制] [分享] [RSS]

日志

用VB编写FLASH动画播放器

已有 873 次阅读2008-2-28 07:58 |个人分类:VBA

用VB编写FLASH动画播放器01-05-04  
   
   
   
  --------------------------------------------------------------------------------  
     
   
   
    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

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 11:31 , Processed in 0.061189 second(s), 14 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部