在Winform(C#)中使用Flash控件

  在Winform(C#)中使用Flash控件
因为项目实战的任务,要用到flash,以前也没怎么用过Falsh控件,加上VS2005跟Flash控件好像有Bug,费了好多时间查资料

加上老师的要求要不Flash数据封装到类里面,倒是费了不少的事 
因为还要数据存入系统缓存,显得好麻烦,不过没发,说是培训我们面向对象的思想,也只有照做了

关于添加Flash控件这里就不介绍了,网上能查到一大堆
VS2005在添加Shockwave时很多人都碰到一个这个问题,就是会说ActiveX注册失败
VS2003没有这样的问题,也不知是什么原因
在Winform(C#)中使用Flash控件_第1张图片






没有遇到这个问题可跳过,有人说可以先添加一个Windows Media Player控件,但我没有成功
网上对于这个的解决方法说的都是不能使很统一
经过一番努力后在一个E文的坛子上找到了解决方法
先要用Regsvr32来注册ActiveX(运行:Regsvr32 控件名)-u为卸载参数
例如Regsvr32 C:/WINDOWS/system32/Macromed/Flash/Flash9f.ocx

或者下载ActiveX Manager来注册,方便很多

注册成功后往往还是有问题

好像是CPU的原因,因为是E文的,俺4级还没过啊,至于原因也没怎么看明白
在VS2005下项目-属性-生成-目标平台改为x86
在选择生成-清理解决方案与重新生成解决方案直到资源管理器的引用下的AxShochwaveFlashObj的黄色感叹号消失

在Winform(C#)中使用Flash控件_第2张图片






AxShockwaveFlashObjects感叹号消失








消失后就可以在form窗体里添加Flash控件了

下面介绍一下Flash控件的一些重要属性和方法(来源于网上一篇Flash控件的秘密(VB))

属性:

1.AlignMode (读写) 
语法:AlignMode As Long 
说明:对齐方式(与 SAlign 属性联动)。当控件的 长宽比例与影片不一致且 WMode 不为 ExactFit 时,影片 
(没有被放大的)在控件中显示的位置可用该属性调整。 该属性值由标志位组成。如图,将该属性值(二进制)中相 应的位标记为 1 就设置了相应的对齐方向。 
属性值与相应的对齐方式(后面括号里是二进制数) 
1
:左对齐(0001)  2:右对齐(0010)  4:顶对齐 
(0100)
  8:底对齐(1000) 
也可以组合各种对齐方式,同时将两个或以上的位标 记为 1 ,也就是将这四个基本值组合相加。比如同时左对齐 和顶对齐,属性值则设为 50101)。 
例子  设置影片为右对齐  
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 指定的距离。 
 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  一个代表相应属性的编号 (详情请参阅附表 )。 
例子 

Dim visibilityIndex As Long visibilityIndex = 7 
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

有些例子是VB的,但还是看得懂,反正不是写Flash播放器的话也用不了多少的
只要一个Movie属性和Play()方法就可以在From里放flash了

这里算是对C# Winform对使用Flash控件的一个总结吧,希望给想我一样对Flash不太熟悉的人一些帮助
在WinFrom里使用Flash的确很炫
from: http://www.cnblogs.com/TZtrue/archive/2008/12/31/1208059.html

你可能感兴趣的:(asp.net,flash,winform,c#,vb,manager,windows)