分享

【转】C#与FLASH的完美结合

 昵称9841599 2012-09-27
2012-05-09 19:10

【转】C#与FLASH的完美结合

用Microsoft Visual Studio 2008新建一个工程,在工具箱上单击右键,选择“添加选项卡”,然后打入“FLASH”字样,再在新的选项卡上单击右键,选择"添加/移除项",在com组件列表中选择Shockwave Flash Object,然后确定,


(注意,这里不要选择添加Macromedia Flash Factory Object控件,虽然它们的DLL文件都是指向同一文件),



加载Shockwave Flash Object控件到FLASH工具箱。
点击“Shockwave Flash Object”控件,在Form1窗体拉出一个FLASH容器,并调整好大小,默认拉出来的FLASH容器名字叫“axShockwaveFlash1”,这时它只是一个容器,显示出一片空白,我们可以设置它的SWF文件路径,使用Movie属性,假如你的D盘有个叫HS.swf的FLASH文件,你可以在Movie属性填写“D:\HS.swf”,这时,窗口应该马上显示HS.swf的预览,按下F5就可以正常加载此文件了。

如果你希望以编程方式动态加载SWF文件,请参考以下代码:
在Form_Load()中加入如下代码
axShockwaveFlash1.Movie =@"D:\Sex.swf"; //请填写绝对地址
axShockwaveFlash1.Menu = false;         //关闭Flash动画右键菜单(还是会有“关于”选项)
axShockwaveFlash1.Playing = true;       //是否让动画播放
如果希望让SWF文件与C#进行互动,请参考以下代码:
------------------------AS2.0代码-----------------------
在FLASH CS 新建一FLA8文件,拖一个按钮进来,并设置其按钮的AS代码
on (release) {
     fscommand ("Hello,World!!");
}
然后,再拖一个"文本框"控件进来,重命名为“txt_Mess”,最后设置该帧的帧AS代码:
import flash.external.*;//向C#发送数据
ExternalInterface.call ("test", "str", Math.random ());//接受C#发来的数据
ExternalInterface.addCallback ("c2flash", null, c2flash);
function c2flash (Ms:String)
{
     txt_Mess.text = Ms;
}
好了,生成SWF文件,文件名:HS.swf 记得生成到D:\根目录下
-------------------------AS2.0代码结束-------------------
------------------------C#3.5代码-----------------------
在Visual Studio的Form1窗体,由于刚才已拉出一个FLASH控件axShockwaveFlash1,其Movie属性已填写为“D:\HS.swf”,现在只要切换到该控件的“事件”属性,在其的FSCommand事件双击,并添加如下代码
if(e.command == "Hello,World!!")
{
     MessageBox.Show("SWF说:"+e.command.ToString()) ;
}
返回Form1窗体,拖一个按钮进来,双击它添加单击事件,代码如下:
private void button1_Click(object sender, EventArgs e)
{    
     callFunction("c2flash",this.textBox1.Text);//向Flash发送数据
}
然后再添加以下C#3.5代码:
void flash_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
{
     string s = nodeXml(e.request.ToString())[0].ChildNodes[0].InnerText.ToString();
     //接受Flash传来的值
     this.textBox1.Text = s;
     throw new Exception("The method or operation is not implemented.");    
}
private void callFunction(string funName,string arg)
{
     //C#传给Flash的值
     flash.CallFunction("<invoke name=\"" + funName + "\" returntype=\"xml\"><arguments><string>"+arg+"</string></arguments></invoke>");
}
private XmlNodeList nodeXml(string s)
{
     XmlDocument doc = new XmlDocument();
     doc.LoadXml(s);
     XmlNodeList list = doc.GetElementsByTagName("arguments");
     return list;
}
然后再修改一下Load代码:
private void Form1_Load(object sender, EventArgs e)
{
flash.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(flash_FlashCall);
}
------------------------C#3.5代码结束-----------------------
按下F5测试!
花生注:如果使用Shockwave Flash Object控件的时候提示:未能导入 Activex控件,请确保它已正确注册!
解决方法:
开始--运行--regsvr32 c:\windows\system32\macromed\flash\flash10b.ocx
(flash10b.ocx是在你机器的FLASH版本,根据你的版本不同而不同,可能会是flash9f.ocx或flash11c.ocx)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多