在Winform(C#)中使用Flash控件
加上老師的要求要不Flash數據封裝到類里面,倒是費了不少的事
因為還要數據存入系統緩存,顯得好麻煩,不過沒發,說是培訓我們面向對象的思想,也只有照做了
關于添加Flash控件這里就不介紹了,網上能查到一大堆
VS2005在添加Shockwave時很多人都碰到一個這個問題,就是會說ActiveX注冊失敗
VS2003沒有這樣的問題,也不知是什么原因
沒有遇到這個問題可跳過,有人說可以先添加一個Windows Media Player控件,但我沒有成功
網上對于這個的解決方法說的都是不能使很統一
經過一番努力后在一個E文的壇子上找到了解決方法
先要用Regsvr32來注冊ActiveX(運行:Regsvr32 控件名)-u為卸載參數
例如Regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash9f.ocx
或者下載ActiveX Manager來注冊,方便很多
注冊成功后往往還是有問題
好像是CPU的原因,因為是E文的,俺4級還沒過啊,至于原因也沒怎么看明白
在VS2005下項目-屬性-生成-目標平臺改為x86
在選擇生成-清理解決方案與重新生成解決方案直到資源管理器的引用下的AxShochwaveFlashObj的黃色感嘆號消失
AxShockwaveFlashObjects感嘆號消失
消失后就可以在form窗體里添加Flash控件了
下面介紹一下Flash控件的一些重要屬性和方法(來源于網上一篇Flash控件的秘密(VB))
屬性:
1.AlignMode (讀寫)
語法:AlignMode As Long
說明:對齊方式(與 SAlign 屬性聯動)。當控件的 長寬比例與影片不一致且 WMode 不為 ExactFit 時,影片
(沒有被放大的)在控件中顯示的位置可用該屬性調整。 該屬性值由標志位組成。如圖,將該屬性值(二進制)中相 應的位標記為 1 就設置了相應的對齊方向。
屬性值與相應的對齊方式(后面括號里是二進制數)
1:左對齊(0001) 2:右對齊(0010) 4:頂對齊
(0100) 8:底對齊(1000)
也可以組合各種對齊方式,同時將兩個或以上的位標 記為 1 ,也就是將這四個基本值組合相加。比如同時左對齊 和頂對齊,屬性值則設為 5(0101)。
例子 : 設置影片為右對齊 :
movie.AlignMode = 2
2.BackgroundColor(讀寫) 語法:BackgroundColor As Long 說明:影片的背景色(與 BGColor 聯動)。以(紅
× 65536 +綠× 256 +藍)計算顏色值。紅綠藍顏色取 值范圍(0-255 )。默認的影片背景色為 -1 。如果影片 設置了底色或有圖片當作背景,那么看不出來該屬性值的 改變會有什么影響 。
例子:將影片背景色設為藍色 :
movie.BackgroundColor = 255
3.Base (讀寫)
語法:Base As String
說明:指定用于解決影片中所有相對路徑的聲明的基 地址。當影片與其需要的其他文件不在同一目錄中的時候該 屬性特別有用。如不特別指定,Base 的值默認為 ".",也就 是當前影片所在的路徑。
例子 :
movie.Base = "Http://www.domain.com/pathname1/
pathname2"
4.BGColor (讀寫)
語法:BGColor As String
說明:影片的背景色(與 BackgroundColor 聯動)。與 BackgroundColor 不同的是,BGColor 是一個六位的十六進 制數,每兩位分別代表紅綠藍顏色值。如:FFEEAA 表示 紅色值為 FF、綠色值為 EE 、藍色值為 AA 。
例子:將影片背景色設為紅色 :
movie.BGColor = "FF0000"
5.DeviceFont (讀寫)
語法:DeviceFont As Boolean
說明 : 決定是否使用影片內嵌的字體 , 默認值為 False 。將該屬性值設為 True 則強制播放器不使用影片中 內嵌的字體而使用本地系統字體。
例子:movie.DeviceFont = True
6.EmbedMovie (讀寫)
語法:EmbedMovie As Boolean
說明:影片是否被存貯到控件所在的容器中。當你已 載入一個影片后將該屬性設為 True ,播放影片時就不必再 去讀 SWF 文件了。這使得在 PowerPoint 簡報或 VB 程序 里使用 Flash 影片更容易。但將該屬性設為 True 后,控 件的 Movie 屬性就不再接受新的值了。要想播放另一個影 片(給 Movie 屬性賦新值),必須先將 EmbedMovie 屬 性設為 False 。
例子 :
movie.EmbedMovie = True
7.FrameNum (讀寫)
語法:FrameNum As Long
說明:影片當前幀的編號 (從 0 開始計數 )。設置 該屬性值將使影片停在由 FrameNum 指定的幀處。
例子 : 顯示當前幀數 :
MsgBox " 當前顯示的是第 " & movie.FrameNum &
" 幀。"
使影片顯示第 10 幀: Bomovie.FrameNum = 9
8.Loop (讀寫)
語法:Loop As Boolean
說明:是否循環播放。設為 True 是循環播放,設為 False 則只播放一次。
例子 :
movie.Loop = True
9.Menu (讀寫)
語法:Menu As Boolean
說明:是否顯示菜單。設為 True 顯示所有菜單,設 為 False 菜單被屏蔽,但仍有一項“About Macromedia Flash Player...”。如果你實在不喜歡這個菜單,應該在程 序中通過攔截鼠標消息的方法來達到目的。與在獨立的 F l a s h 播放器中不同的是 ,在控件的右鍵菜單里點
“About...”的話,將打開瀏覽器到 Macromedia 的網站上去 看 About 了。
例子 :
movie.Menu = False
10.Movie (讀寫)
語法:Movie As String
說明:要播放的影片路徑(URL )。設置該屬性為 一個 SWF 文件的 URL 將載入文件并播放它。若影片是在 本地硬盤上,要寫成從盤符開始的絕對路徑;若影片是在 某網站上,也要寫全 URL 地址。
例子 :
movie.Movie = "http://www.domain.com/path1/
path2/filename.swf" 或
movie.Movie = "c:\temp\test.swf"
11.Playing (只讀)
語法:Playing As Boolean
說明:當前播放狀態。如果影片正在播放,該屬性 值為 True ,否則為 False 。
例子 :
If movie.Playing = False Then MsgBox " 影片已停止播放! " End If
12.Quality (讀寫)
語法:Quality As Long
說明:畫面質量(與 Quality2 聯動)。Quality 可 以取:
0 ——相當于 Quality2 取 "Low"
1 ——相當于 Quality2 取 "High"
2 ——相當于 Quality2 取 "AutoLow"
3 ——相當于 Quality2 取 "AutoHigh" 例子 :
movie.Quality = 1
13.Quality2(讀寫)
語法:Quality As String
說明:畫面質量(與 Quality 聯動)。Quality2 可以取: Low :偏重于播放速度而不管顯示效果,而且不啟用
消鋸齒功能 。
High :偏重于畫面而不管播放速度,并且總是啟用 消鋸齒功能。如果影片中不包含動畫就平滑處理位圖;如 果有動畫,那么位圖就不被平滑處理。(這里的動畫應該 是把一張圖片做平移或旋轉)
AutoLow :先著重于播放速度,但只要有可能就改 善顯示效果。一開始播放時先禁用消鋸齒功能。如果播放 器檢測到處理器能承受得了 ,就啟用消鋸齒功能 。
AutoHigh:一開始是播放速度和顯示效果并重,但 如有必要就犧牲畫質確保速度。開始播放時就啟用消鋸齒 功能。但如果實際的幀速率比設計時指定的速率慢了,就 禁用消鋸齒功能來提高播放速度。
例子 :
movie.Quality2 = "High"
14.ReadyState(只讀)
語法:ReadyState As Long
說明:影片的當前狀態。ReadyState 可以取:
0 ——正在載入
1 ——未初始化
2 ——已載入
3 ——正在交互
4 ——完成 例子 :
If movie.ReadyState = 4 Then
MsgBox " 影片載入完成! " End If
15.SAlign (讀寫)
語法:SAlign As String
說明:對齊模式(與 AlignMode 聯動)。當 AlignMode
代表各對齊模式的位被置“1”時,SAlign 值也相應被設為
“L”(Left)、“T”(Top)、“R”(Right)、“B”(Bottom)各 字符的組合。(‘L’、‘T’、‘R’、‘B’的先后順序不變)
例子:設置影片為左對齊和頂對齊:
movie.SAlign = "LT"
16.Scale (讀寫)
語法:scale As String
說明:縮放模式(與 ScaleMode 聯動)。Scale 可以 取:
ShowAll ——在控件內顯示全部影片區域,保持影片 長寬比例不變,影片的大小決定于控件長或寬中較小的一 邊 。
NoBorder ——在控件內顯示部分影片區域,保持影片 長寬比例不變,影片的大小決定于控件長或寬中較大的一 邊 。
ExactFit ——在控件內顯示全部影片區域,將影片的長 寬比例強制等于控件的長寬比例。
MsgBox " 當前的縮放模式是:" & movie.Scale
17.ScaleMode(讀寫)
語法:ScaleMode As Long
說明:縮放模式(與 Scale 聯動)。ScaleMode 可以取:
0 ——相當于 Scale 取 "ShowAll"
1 ——相當于 Scale 取 "NoBorder"
2 ——相當于 Scale 取 "ExactFit"
例子:使影片的縮放模式改成“ExactFit ”:
movie.ScaleMode = 2
18.Stacking (讀寫)
語法:Stacking As String
說明:用于 HTML,將 Flash Player 當成 HTML 中 的一種“行為”使用時,該屬性決定 Flash 影片相對于與其 參照的 HTML 內容如何顯示。(有關“行為”請參閱樣式表 的資料)。Stacking 可以取:
none ——“行為”不顯示。
replaceall ——“行為”的顯示取代全部其他元素的內 容 , 包括背景 。
content ——“行為”的顯示只取代其他元素的內 容。
background ——“行為”的顯示只取代其他元素的背 景 。
below ——“行為”在所有其他元素內容的下面顯 示。
belowflow ——“行為”以反向 Z 順序顯示在其他元素 的子對象之上 ,但在該元素主要內容之上。
aboveflow ——“行為”以正向 Z 順序顯示在其他元素 的子對象之下 ,但在該元素主要內容之上。
above ——“行為”顯示在所有其他元素的內容之上。
top ——“行為”的顯示置于整個頁面內容之上。 例子 :
movie.Stacking = "below"
19.TotalFrames(只讀)
語法:TotalFrames As Long
說明:返回影片中總幀數。該參數要到影片載入完成 才有效(ReadyState=4)。
例子 :
If movie.ReadyState = 4 Then
MsgBox " 本影片共有 " & movie.TotalFrames & " 幀。"
End If
20.WMode (讀寫)
語法:WMode As String
說明:控件的窗口模式。WMode 可以取: Window —— WMode 屬性的默認值,按 Flash 播放器
典型的方式工作,即在控件的矩形窗口中播放影片,這樣一 般都能提供最快的動畫效果。
Opaque ——使影片不透明。 Transparent ——創建一個透明的影片。如果影片中有
透明的片段,放到這里時,就可以看到控件下面的背景。但 使用此屬性值,動畫的播放速度可能會慢一些。
例子 :
movie.WMode = "Transparent"
方法:
1.Back
語法:Back()
說明 : 影片后退一幀 , 并且停止播放 。 例子 :
movie.Back
2.Forward
語法:Forward()
說明 : 影片前進一幀 , 并且停止播放 。 例子 :
movie.Forward
3.GotoFrame
語法:GotoFrame(FrameNum As Long) 說明:將影片跳轉到由 FrameNum 指定的幀,并且
停止播放。如果所指定的幀還未載入,播放器前進到最后 的可用幀并停下,在調用過程中會產生無法預料的后果。 最好使用 PercentLoaded 方法來確定是否已載入足夠的影片 來執行本方法。參數 FrameNum 是從 0 開始的,這和 Flash 中的 Goto 動作不一樣,它是從 1 開始的。
例子:跳轉到影片的第 20 幀:
movie.GotoFrame 20
4.LoadMovie
語法:LoadMovie(layer As Long, url As String) 說明:將由 url 指定的影片載入到由 layer 指定的層上。 例子:將 movie.swf 載入至 0 層:
movie.LoadMovie 0, "movie.swf"
5.Pan
語法:Pan(x As Long, y As Long, mode As Long) 說明:將一個放大過的影片平移由 x 和 y 指定的距離。
x 和 y 均為相對值。即控件相對于影片來說平移的距離(你 可以想象控件是一個窗戶,影片是我們從窗戶里看到的放 在外面的布景, 我們看到窗戶相對于布景平移了一些距離, 那是外面的布景在動,而窗戶是不動的)。用 mode 參數 來指定 x 和 y 的值是像素還是窗口的百分比,當 mode=0 時 坐標系以像素為單位;mode=1 時坐標系就以窗口的百分 比來計算。 平移并不能超出影片的邊框,也就是說,往 一個方向平移最多到達影片的邊緣與控件對齊的程度。
例子:控件相對于影片向左向上各平移 5 個像素(當 然控件不會動 ,是影片向右向下平移了 ):
movie.Pan 5,5,0
6.Play
語法:Play()
說明: 開始播放影片。 例子:
movie.Play
7.Rewind
語法:Rewind()
說明: 倒帶。返回到影片的第一幀 。 例子:
movie.Rewind
8.SetVariable
語法:SetVariable(name As String, value As String) 說明:將由 name 指定的 Flash 變量值設為 value。 例子:movie.SetVariable "/Form:UserName", "John Smith"
9.SetZoomRect
語法:SetZoomRect(left As Long, top As Long, right
As Long, bottom As Long)
說明: 將影片中指定的矩形區域放大到控件的大小。 left(左)、top(頂)、right(右)、bottom(底)的坐標值是相 對于控件中的影片有效位置計算的。注意喲,這個函數是 從影片的有效區域的左上角開始計算,而不是控件的左上 角 。
例子:放大影片中從左上角開始的 200 × 200 點的矩 形區域 :
pointsToTwips = 20;
movie.SetZoomRect 0, 0, 200 * pointsToTwips, 200
* pointsToTwips
10.Stop
語法:Stop()
說明 : 停止播放影片 。 例子:movie.Stop
11.StopPlay
語法:StopPlay()
說明 : 停止播放影片 。 例子:movie.StopPlay
12.TCallFrame
語法:TCallFrame(target As String, FrameNum
As Long)
說明:在由 t a r g e t 指定的時間軸中,執行由 FrameNum 指定的幀中的動作。
例子:要運行主時間軸中第 5 幀的動作:
movie.TCallFrame "/", 4
13.TCallLabel
語法:TCallLabel(target As String, label As String) 說明:在由 target 指定的時間軸中,執行由 label 指
定的幀中的動作。 例子:要運行主時間軸中名為“HandleScriptNotify”
的幀中的動作:
movie.TCallLabel "/", "HandleScriptNotify"
14.TGotoFrame
語法:TGotoFrame(target As String, FrameNum
As Long)
說明:對于由 t a r g e t 指定的時間軸,轉到由 FrameNum 指定的幀。
例子 :
movie.TGotoFrame "/MovieClip", 2
15.TGotoLabel
語法: TGotoLabel(target As String, label As String) 說明:對于由 target 指定的時間軸,轉到由 label 指
定的幀。
例子:movie.TGotoLabel "/MovieClip", "MyLabel"
16.TPlay
語法:TPlay(target As String) 說明:播放由 target 指定的時間軸。 例子:movie.TPlay "/MovieClip"
17.TSetProperty
語法:TSetProperty(target As String, property As
Long, value As String)
說明:對于由 target 指定的時間軸,把由 property 指 定的屬性設為由 value 指定的值(字符串)。property 是一個 代表相應屬性的編號(詳情請參閱附表)。
例子 :
Dim nameIndex As Long
nameIndex = 13
movie.TSetProperty "/MovieClip", nameIndex,
"NewName"
18.TSetPropertyNum
語法:TSetPropertyNum(target As String, property
As Long, value As Double)
說明:對于由 target 指定的時間軸,把由 property 指定的屬性設為由 value 指定的值(數字)。property 是 一個代表相應屬性的編號 (詳情請參閱附表 )。
例子 :
movie.TSetProperty "/MovieClip", visibilityIndex, 1
19.TStopPlay
語法:TStopPlay(target As String) 說明:停止播放由 target 指定的時間軸。 例子 :
movie.TStopPlay "/MovieClipToStop"
20.Zoom
語法:Zoom(factor As Long) 說明:以 factor 指定的相對百分比來縮放視圖。factor
可以理解為從控件窗口看到的影片占實際大小的百分比。將
factor 設為 0,則視圖還原成 100% 大小。當前視圖已經是
100% 時不能再將其縮小。
例子 : 將影片放大兩倍 : movie.Zoom 50 下面的方法都有返回值:
21.CurrentFrame
語法:CurrentFrame() As Long 說明: 返回影片的當前幀數。影片的第一幀為 0 。 例子 :
Dim frameNow As Integer frameNow = movie.currentFrame
22.FlashVersion
語法:FlashVersion() As Long
說明:返回控件版本號。該值共有三個字節,依次是主 版本號、次版本號、修訂版本號。如我用的 Flash 播放器控 件用此方法返回值是 3 2 7 7 2 2 ,相當于十六進制的
&h05002A,相當于 5.00.42。
例子:下列程序顯示你所使用的控件版本號:
Dim verNum, majorNum, minorNum, revisionNum
As Long verNum=movie.FlashVersion majorNum=verNum \ 65536
minorNum=(verNum - majorNum * 65536) \ 256
revisionNum = verNum Mod 256
MsgBox " 你的 Flash 播放器控件的版本號:" &
majorNum & "." & minorNum & "." & revisionNum
23.GetVariable
語法:GetVariable(name As String) As String
說明:返回 name 指定的 Flash 變量的值。如果變量 不存在則返回 null。
例子 :
Dim firstName, radioButtonValue As String firstName = movie.GetVariable "FirstName" radioButtonValue = movie.GetVariable("/Form/
RadioButton:Value")
24、IsPlaying
語法:IsPlaying() As Boolean
說明:如果影片正在播放則返回 true 。 例子 :
If movie.IsPlaying Then
MsgBox " 影片正在播放中! " End If
25.PercentLoaded
語法:PercentLoaded() As Long
說明:返回目前已經載入的影片的百分比。取值范圍 從 0 到 100 。
例子 :
Dim loaded As Boolean
If movie.PercentLoaded = 100 Then loaded = true
End If
26.TCurrentFrame
語法:TCurrentFrame(target As String) As Long 說明:返回由 target 指定的時間軸中當前幀的號碼。返 回的幀號碼是從 0 開始的,也就是說影片的第一幀為 0 ,第
二幀為 1,以此類推。 例子 :
Dim currentFrame As Long
currentFrame = movie.TCurrentFrame("/MovieClip")
27.TCurrentLabel
語法:TCurrentLabel(target As String) As String
說明:返回由 target 指定的時間軸中當前幀的標簽。 如果沒有當前幀的標簽,則返回一個空字符串。
例子 :
Dim currentLabel As String
currentLabel = movie.TCurrentLabel("/MovieClip")
28.TGetProperty
語法:TGetProperty(target As String, property
As Long) As String
說明:對于由 target 指定的時間軸,返回由 property 指定的屬性值(字符串)。其中,property 是一個代表相應 屬性的編號(詳情請參閱附表)。
例子 :
Dim nameIndex As Long Dim name As String nameIndex = 13
name = movie.TGetProperty("/", nameIndex)
29.TGetPropertyNum
語法:TGetPropertyNum(target As String, property
As Long) As Double
說明:對于由 target 指定的時間軸,返回由 property 指定的屬性值(數字)。其中,property 是一個代表相應屬 性的編號(詳情請參閱附表)。
例子 :
Dim framesLoadedIndex As Long Dim framesLoaded As Double framesLoadedIndex = 12
framesLoaded = movie.TGetProperty("/", framesLoadedIndex)
附表:獲取及設置屬性。相應的每個屬性的編號都可用 在 TGetProperty、TGetPropertyAsNumber、TSetProperty 或 TSetPropertyNum 中,以指出將要訪問的屬性。
事件:
1.FSCommand
語法:FSCommand(command As String, args As
String)
說明:在 Flash 中為影片添加的 FSCommand 動作可 以從影片中傳遞信息給 Flash 播放器,Flash 播放器或包含 播放器控件的網頁或程序播放這個影片時就根據得到的這些 信息執行相應的動作,從而實現影片內部與外部應用的交 互操作。如在 F l a s h 中給一個按鈕圖片添加如下的 Action:
on(release) {
fscommand("fullscreen","true");
}
當 Flash 播放器播放這個文件時點擊按鈕,播放器就 會切換到全屏模式。下面是 Flash 自帶的播放器能識別的 命令和它們的參數:
命令 : quit
參數 : 無參數
作用:關閉播放器 命令:fullscreen 參數:true 或 false
作用:設置為 true 使播放器以全屏模式播放;設置 為 false 使播放器回到一般窗口模式播放。
命令:allowscale
參數:true 或 false
作用:設為 false 將使影片不隨播放器大小改變而改 變,始終保持原始尺寸,相當于播放器菜單中的 100% ; 設為 true 則恢復影片隨播放器大小而改變的尺寸,相當于 播放器菜單中的 Show All 。
命令:showmenu
參數:true 或 false
作用:設為 true 顯示全部菜單,包括菜單欄和播放 區的右鍵菜單;設為 false 菜單欄不顯示,播放區的右鍵 菜單中只有一項“About Macromedia Flash Player...”。
命令: exec
參數:應用程序的路徑及名稱 作用:執行一個指定的應用程序。如在 Flash 影片中
添加動作為 :
fscommand("exec","regedit");
則播放器播放影片時執行此動作會打開“注冊表編輯 器”程序。注意喲,Flash 自帶的播放器接收到這些命 令后會執行相應的動作,但在控件中不會有任何反應,只 能由程序在 FSCommand 事件中分析接收到的 command 和args 并編程做出相應處理。
2.OnProgress
語法:Event OnProgress(percentDone As Long) 說明:發生在 Flash 影片下載時。percentDone 是影
片已下載的百分比,取值從 0 到 100 。
例子:在窗體標題欄中顯示下載進度:
Private Sub movie_OnProgress(ByVal percentDone
As Long)
form1.Caption = " 影片已下載:" & percentDone
& "%"
End Sub
3.OnReadyStateChange
語法:Event OnReadyStateChange(newState As
Long)
說明:發生在控件的準備狀態改變時。下面列出了
newState 可能的值:
0 ——正在載入
1 ——未初始化
2 ——已載入
3 ——正在交互
4 ——完成
例子:影片載入完成后出現提示信息,然后開始播放 影片 :
Private Sub movie_OnReadyStateChange(newState As
Long)
If newState = 4 Then
MsgBox " 影片載入完成! " & vbCrLf & " 影片總幀 數:" & movie.TotalFrames
movie.Play
End If
End Sub
只要一個Movie屬性和Play()方法就可以在From里放flash了
這里算是對C# Winform對使用Flash控件的一個總結吧,希望給想我一樣對Flash不太熟悉的人一些幫助
在WinFrom里使用Flash的確很炫

浙公網安備 33010602011771號