C# 下面的Flash应用(winform) |
原创文章,欢迎引用。 |
前提:引用以下两个
dll
AxInterop.ShockwaveFlashObjects.dll
Interop.ShockwaveFlashObjects.dll
假如没有,可以到
flash
官方下载。
以上两个
dll
,除包含和
c#
本例要的的类和方法外,也已经继承了
flash
播放器了。
下面开始,介绍:
1>
定义一个
private
AxShockwaveFlashObjects.AxShockwaveFlash axShockwaveFlash1;
并加载某一
flash
,比如
test.swf
,(推荐直接从面板中拖出
flash
,然后设置相关属性)
this
.axShockwaveFlash1.LoadMovie(0,
“
test.swf
”
)
;
2>
实现从flash 传递一些信息到C# 内部:
主要是为flash的一些original event 加一些c# function,例如:
this
.axShockwaveFlash1.FSCommand +=new AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEventHandler(axShockwaveFlash1_FSCommand)
这里的FSCommand是flash本身的一个事件,这里给他加上一个函数axShockwaveFlash1_FSCommand
private
void axShockwaveFlash1_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)
{
// We only want to react if we got our command
if (e.command == "flashMessage")
{
this.richTextBox1.AppendText(e.args + "/n");
}
}
3>
实现从C#内部传递信息给flash,直接调用flash的一个函数就可以了。
this
.axShockwaveFlash1.SetVariable("CSharpMessage", "Hi Flash!");
要实现上面的功能,还必须在flash里面写代码
/
// C-Sharp-Message-Broadcaster
// bcCSharpMessage
,
onCSharpMessage
,
CSharpMessage
不是系统自带的
/
_root.bcCSharpMessage = function (varName, oldVal, newVal)
{
arguments.callee.broadcastMessage("onCSharpMessage", newVal);
}
ASBroadcaster.initialize(_root.bcCSharpMessage);
_root.onLoad = function ()
{
this.CSharpMessage = null;
this.watch("CSharpMessage", this.bcCSharpMessage);
//
这里的"CSharpMessage" 是dll里面SetVariable("CSharpMessage", "Hi Flash!");
}
/
// Test
/
// Receive from C-Sharp
obj = new Object();
obj.onCSharpMessage = function (strMessage)
{
_root.flashoutput_txt.text += strMessage + "/n";
}
_root.bcCSharpMessage.addListener(obj);
// Send to C-Sharp
_root.buttonSend_mc.onRelease = function ()
{
fscommand("flashMessage", "Hi C-Sharp");
//fscommand
可以给c#接收
}
|
添加SWFLASH.OCX的引用,会自动添加了引用AxShockwaveFlashObjects, ShockwaveFlashObjects
在工具箱的容器面板会里有个MacroMedia Flash Factory Object
(1) 在Form1.Designer.cs中的最下方与其他定义控件语句放一块定义:
private AxShockwaveFlashObjects.AxShockwaveFlash FlashBox;
(2) 在在Form1.Designer.cs中private void InitializeComponent()方法中添加2条语句:
this.FlashBox = new AxShockwaveFlashObjects.AxShockwaveFlash();
this.Controls.Add(this.FlashBox);
http://www.cnblogs.com/boarduck/archive/2006/08/03/466871.aspx
Reader of SWF header file in pure C#
纯C#代码的SWF文件头(Flash)读取(高度宽度及帧数)源代码
FlashHeaderReader swfreader = new FlashHeaderReader(openFileDialog1.FileName);
listBox1.Items.Clear();
listBox1.Items.Add("Frames : " + swfreader.FrameCount);
listBox1.Items.Add("Width : " + swfreader.Width );
listBox1.Items.Add("Height : " + swfreader.Height);
FLASH 的编程语言 如何简单修改。。。 C#与FLASH的 简单参数通信。
FLASH中
import flash.external.ExternalInterface;
ExternalInterface.addCallback("AddLog",AddLog);
function AddLog(str:String)
{ preview(Number(str));
}
C#:
this.axShockwaveFlash1.Movie = Application.StartupPath + "//flash//main.swf";
this.axShockwaveFlash1.CallFunction("<invoke name=/"AddLog/" returntype=/"xml/">"
+ "<arguments>" + "<string>" + "888888" + "</string>"
+ "</arguments>" + "</invoke>");
找了网上有说用这个
fscommand 函数可以使 SWF 文件与 Flash Player 或承载 Flash Player 的程序(如 Web 浏览器)进行通讯。还可以使用
那么怎样实现flash与C#或者是其他应用程序的通信呢,这里我以C#为例:
首先在flash创建一个按钮,并命名为flashToCBtn,在创建一个动态文本框,命名为flashFromCTxt,然后在第一侦添加如下代码:
flashToCBnt.onRelease=function()
{
fscommand("cmd","hello C#");
}
到这里flash已经完成了,下面就是C#了:
打开vs新建一个C#的项目,在窗体上添加一个axShockwaveFlashObject的控件,将他的影片URL指向你刚刚发布的flash,然后再该控件的FSCommand事件上添加如下代码:
if (e.command == "cmd")
{
MessageBox.Show(e.args.ToString());
}
测试项目,在单击flashToCBtn按钮,将弹出"hello C#";你还可以在C#中通过阿axShockwaveFlash1.SetVariable来控制flash中的影片或者是变量的值。
Flash发送到C# :
在Flash中设计一个按钮,事件为:
btn.onRelease = function() {
fscommand("Send Action", "www.an86.net");
};
在c#中插入Shockwave Flash Object 对象 movie的属性就是Flash[SWF]影片的地址。
在Shockwave Flash Object 的 FSCommand 事件中插入:
if(e.command == "Send Action")
{
MessageBox.Show("调用FLASH按钮事件成功 "+e.args) ;
}
上面都可以调试成功
但是下面 C#到FLASH 就不知道怎么调试都不成。。。
C#发送到Flash :
在c#中放入一个按钮,事件:
private void button1_Click(object sender, System.EventArgs e)
{
string flashData = "一二三四五六七";
axShockwaveFlash1.SetVariable("txt",flashData);
}
而在Flash中就写两句代码就可以了:
var mo:Object=new Object();
mo.watch("txt");
如上内容参考:
http://www.guaiguaier.com 乖乖儿-育儿工具资源网