一、編程原理
本程序利用了Flash4本身自帶播放Flash動畫的控件Swflash.ocx。你可以通過以下途徑獲得該控件:
1、安裝Flash4;
2、安裝Windows98自帶的Flash插件,方法:依次單擊“開始”菜單-“設置”-“控制面板”-“添加/刪除程序”-“Windows 安裝程序”-“多媒體”-“詳細資料”-選中“Macromedia Shockwave Flash”前的復選框確定即可。
以上方法都會將該控件安裝到Windows目錄下的SystemMacromedFlash子目錄下。
二、示例程序
下面就是一個用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() 將畫面質量設置為高分辨率 Form2!ShockwaveFlash1.Quality = 1 mnuQuality0.Checked = False mnuQuality1.Checked = True End Sub Private Sub mnuZoomIn_Click() 放大畫面。 Form2!ShockwaveFlash1.Zoom (50) End Sub Private Sub mnuZoomOut_Click() 縮小畫面。 Form2!ShockwaveFlash1.Zoom (200) End Sub Private Sub Form_Unload(Cancel As Integer) End 結束程序 End Sub |
第二步:在Form2的代碼窗口中添加以下代碼:
| Private Sub Form_Resize() 將ShockwaveFlash1控件的大小設置為Form2的大小。 ShockwaveFlash1.Top = Form2.ScaleTop ShockwaveFlash1.Left = Form2.ScaleLeft ShockwaveFlash1.Width = Form2.ScaleWidth ShockwaveFlash1.Height = Form2.ScaleHeight End Sub Private Sub Timer1_Timer() 在狀態欄和滑動條上顯示當前播放的幀。 Form1!StatusBar1.Panels(5).Text = Str(ShockwaveFlash1.FrameNum) Form1!Slider1.Value = ShockwaveFlash1.FrameNum End Sub |
第三步:調試、運行程序,運行界面如圖2所示。
當播放Flash動畫時,在播放窗口中單擊鼠標右鍵時,將會彈出如圖3所示的菜單。在該菜單,我們可以完成控制Flash動畫播放的大部份工作。若想取消該功能,只要將Shockwave flash控件的Menu屬性設置為False即可。
以上程序在Windows98,VB6.0下運行通過。