[No000070]Flash与C#通信
- 注册控件
首先要插入Flash就必须使用Flash控件,在工具栏右键选择"选择项…",然后在"COM组件"面板下点击"浏览"按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash10x.ocx(也有可能是Flash10v.ocx或flash10p.ocx),然后点击确定就可以了。在CMD里面输入如下:
regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash10x.ocx
系统会提示注册成功。 - 控件属性
打开VS,然后工具栏中选择的Flash控件Shockwave Flash Object拖到窗体中,
注意到该控件主要有几个属性:
Name属性,这个是所有对象都会有的。
Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简单的菜单(设置与关于)。
Move属性,这个属性是用来指定要播放的Flash文件的。
Playing属性,指定是否装在影片之后马上播放。
Quality属性,设置影片的质量。
Scale Mode属性,设置影片的缩放模式。
Visible属性,设置影片控件的可视与否。 - 隐藏Flash控件右键菜单
这个方法主要用到继承和重写等面向对象的核心内容。
首先声明一个类,让它去继承AxShockwaveFlashObjects.AxShockwaveFlash,该类是实例化Flash控件生成的类。该类中包含各种Flash的事件和属性,在这里我们只对右键菜单的事件感兴趣,因此我们去重写该事件。
类的代码如下:public class FlashRightKey : AxShockwaveFlashObjects.AxShockwaveFlash
{
//定义一个公共类FlashRightKey(类名自己定义)来继承AxShockwaveFlashObjects.AxShockwaveFlash(在实例化Shockwave Flash Object控件后生成)类protected override void WndProc(ref Message m) //重载WndProc方法(此方法即消息处理机制)
{
if (m.Msg == 0X0204) //0×0204即鼠标右键的16进制编码
return; //返回并不输出
else
base.WndProc(ref m); //如果不是右键的话则返回正常的信息
}
}类写好了,我们要在Flash控件里面使用它,必须在实例化Flash控件的时候用如下代码(写在Flash.Designer.cs文件相应的地方):
private FlashRightKey RollFlash;
this.RollFalsh = new Namespace.FlashRightKey();
- C#与Flash控件通信
通信数据采用XML格式。
C#代码:
绑定Flash控件
private void FlashTest_Load(object sender, EventArgs e)
{
Flash.Movie = Application.StartupPath + @"\Test.swf";
}
调用flash提供的外部接口
private void CallFunction(string funName, string flag)
{
Flash.CallFunction(EncodeXML(funName, flag));
}
将数据转换成XML格式
private string EncodeXML(string funName, string flag)
{
StringBuilder sb = new StringBuilder();
XmlTextWriter xw = new XmlTextWriter(new StringWriter(sb));
xw.WriteStartElement("invoke");
xw.WriteAttributeString("name", funName);
xw.WriteAttributeString("returntype", "xml");
xw.WriteStartElement("arguments");
xw.WriteStartElement("string");
xw.WriteString(flag);
xw.WriteEndElement();
xw.WriteEndElement();
xw.WriteEndElement();
xw.Flush();
xw.Close();
return sb.ToString();
}
执行动画开始操作
private void Btn_Start_Click(object sender, EventArgs e)
{
CallFunction("Call", "001");
}
执行动画结束操作
private void Btn_End_Click(object sender, EventArgs e)
{
CallFunction("Call", "002");
}
接收Flash发送过来的数据
private void Flash_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(e.request);
XmlNodeList xl = xd.GetElementsByTagName("arguments");
MessageBox.Show(xl[0].FirstChild.InnerText);
}
Flash代码:
package {
import flash.display.*;
import flash.text.*;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
public class Test extends flash.display.MovieClip {
public function Test() {
ExternalInterface.addCallback("Call",Call);//外部接口,供C#调用
btn.addEventListener(MouseEvent.CLICK,SendCsharp);
}
//供C#窗体调用的方法
private function Call(flag:String):void {
switch (flag) {
case '001' :
df.gotoAndPlay(2);//控制动画开始
break;
case '002' :
df.gotoAndStop(1);//控制动画结束
break;
default :
break;
}
}
//像c#窗体发送信息
public function SendCsharp(e:MouseEvent):void {
ExternalInterface.call("Send","Hello World!");//外部接口,向C#传递数据
}
}
}
[No000070]Flash与C#通信的更多相关文章
- FlashSocke 通过flash进行socket通信(as代码)
在早期的项目中, 因为需要用IE上连接socket进行通信, 所以不得不借助于flash的socket功能,于是有了下面这个`FlashSocke`,供JavaScript调用 和 回调JavaScr ...
- [转]Flash Socket通信的安全策略
昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这里感谢 剑心 提供帮助,以及同事若水三千提供Jav ...
- c# 与flash通信简介
许久不曾写随笔,即使许久的怠惰,是该抬抬头,看看天了. 公司项目,项目要求是在winForm端先获取下位机的肌电信号采集数据,然后根据这些数据的变化来控制flash游戏,这样一些患者在flash游戏中 ...
- Flash Socket通信的安全策略问题 843端口
1.问题描述 将flash发布为html格式后,加载页面后,swf无法与服务器进行socket通信.Flash端显示的错误为:securityErrorHandler信息: [Securi ...
- Flash上传文件(结合asp.net)
一.实现原理.在某些场合,我们需要使用Flash进行“文件上传”,原因是Flash 能制作出表现力丰富的UI界面. (自负又孤陋寡闻的我在这里做一个补充:Flash使用flash.net包中的File ...
- 基于Flash ActionScript 实现RTMP发布与播放媒本流
1 为什么要采用Flash ActionScript实现RTMP协议发布或播放媒体流,播放媒体流,协议可控,比如对流媒体数加密,混音等. 2 核心思路使用Flash Socket建立TCP二进制传输 ...
- 最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript)
===================================================== Flash流媒体文章列表: 最简单的基于Flash的流媒体示例:RTMP推送和接收(Acti ...
- spinor/spinand flash之高频通信延迟采样
SPI协议 对于spinor和spinand flash,其通信总线为SPI总线. SPI有四种工作模式,对应不同的极性和相位组合 极性,一般表示为CPOL(Clock POLarity),即SPI空 ...
- RTMP协议
Real Time Messaging Protocol(实时消息传送协议协议)概述 实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的私有协 ...
随机推荐
- centos mysql php Curl
开放80端口 #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT #/sbin/iptables -I INPUT -p tcp --dport ...
- 新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World!
一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! 一节,新建一个项目: 二.添加引用并修改配置为 Web API (.NET Core 已将 MVC/W ...
- Sqlserver 中系统表sysobjects、syscolumns以及函数object_id
1.sysobjects 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 sysobjects 重要字段解释: sysObjects ( Name sysname, --o ...
- [deviceone开发]-do_Http组件示例
一.简介 详细展示do_Http组件的使用,包括get,post,upload,form,download的http请求.另外还附加了一个Java实现的后台程序作为参考.初学者强烈推荐. 二.效果图 ...
- Dynamics XRM Tools 2015 2016
Download Link: Dynamics XRM Tools 2015/2016 Overview Dynamics XRM Tools brings you a quality range o ...
- Mac Security工具使用总结
Security是Mac系统中钥匙串和安全模块的命令行管理工具,(图形化工具为Keychain Access.app).钥匙串(Keychain)实质上就是一个用于存放证书.密钥.密码等安全认证实体的 ...
- iOS9请求https问题-记录
iOS9 开始苹果将HTTP全改为HTTPS了,所以出现网络请求失败问题,解决办法: 1.改回HTTP: 在info.plist文件中添加一个Key:NSAppTransportSecurity(字典 ...
- Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
转载请标明出处: http://www.cnblogs.com/why168888/p/5925756.html 本文出自:[Edwin博客园] 错误日志:Error:java.lang.Runtim ...
- OOP感悟
行内讲的最多的就是出来一年内基本靠copy,一年后才基本懂得如何去写代码,而理解领悟oop,需要的时间却不定. 我工作中,我发现很多人拿着面向对相当的语言作者做着面向过程的事情,不需要知其所以然,只要 ...
- RoboGuice 3.0 (二)进阶篇
上篇介绍了RoboGuice的接入及基本使用,其中涉及到了一个@Singleton和@ContextSingleton的注解,这些都是作用域的注解,这篇我们先说明有关作用域的问题. 一.作用域 Sco ...