2024年6月13日发(作者:)
下面测试于:vs2008
1.选择“工具箱”,单击鼠标右键,在弹出的快捷菜单中选择“选择项”。
2.弹出“选择工具箱项”对话框,选择“COM组件”选项卡。
3.
在
COM
组件列表,单击
[
浏览
]
按钮,在对话框中选择
"//system32/Macromed/Flash/"。
在工具箱的容器面板里有个
MacroMediaFlashFactoryObject
而且自动添加了引用AxShockwaveFlashObjects,ShockwaveFlashObjects
如果工具箱中已经有了,可以删除重新添加,以便自动添加引用。
在放入窗体中时报错“未能导入ActiveX控件。请确保他已正确注册”.
所以手动添加如下代码:
(1)在中的最下方与其他定义控件语句放一块定义:
kwaveFlashFlashBox;
(2)在在中privatevoidInitializeComponent()方法中添加2条
语句:
ox=kwaveFlash();
(ox);
接下来就可以在
Form[
设计
]
中可视化编程了,以上语句也会自动规格化。
由于之前一阵公司一个项目提出的需求,自己也想进行这方面的尝试,我对如何使
用
Flash
来做
WinForm
程序的界面产生了兴趣,于是学习了一些资料,摘要于此。
下图是我做的一个demo程序的界面:
要在WinForm中使用Flash,通常需要用到ShockwaveFlashObject这个
COM组件。
(/csharp/)
(/useritems/)
具体步骤如下:
首先添加对COM组件ShockwaveFlashObject的引用,将该组件拖到窗体上之
后,可以设置如下关键属性:
Movie:flash的存放地址
EmbedMovie:
是否嵌入到程序的资源中。
接下来你可以设置其他一些属性,使得Flash的窗口最大化,隐藏掉其宿主程序的
C#WinForm
窗体。
在Flash的ActionScript中,可以通过FSCommand函数与hostingapp通信,
该函数有两个参数,分别是:
command:
命令名称
parameters:
参数
例子:
on(press){
fscommand("Circule","Green");
}
在C#中,处理flash对象的FSCommand事件即可。
如果该事件处理函数的EventArgs为e,则有如下对应关系:
d->flash中调用FSCommand时的command参数;
->flash
中调用
FSCommand
时的
arguments
参数。
在C#中往Flash传递数值用SetVariable方法:
iable("variablename","valueasstring");
对应的,有一个GetVariable方法可以获得flash中的变量值。
FSCommand的参数只能传递一个,所以其功能存在一定的局限性。在你需要传递
多个参数的时候,则需要在调用方用字符串拼接各个参数值,然后在被调用方重新
解开。这种办法使得复杂的传值显得很丑陋。
不过,除了
FSCommand
外,我们还有另一种办法和
flash
通信,就是使用
Flash
Player8ExternalAPI.
(/cs/media/)
使用ExternalAPI,可以实现ActionScript和C#的双向调用。其好处就在于每
次调用时的参数和返回值都通过一个
xml
文档来传递,这样就比
FSCommand
功
能完善了很多。当然在
C#
中,我们也需要声明一下外部函数实现的对应关系。
代码片段:
FlashActionScript中声明提供给hostingapplication调用的回调函数:
alInterface;
lback("loadAndPlayVideo",null,loadAndPlayVideo);
C#中调用Flash的情形:
nction(" "name=/"loadAndPlayVideo/"returntype=/"xml/"> "
在
ActionScript
中调用
C#
函数:
("ResizePlayer",
,);
在
C#
中声明被
Flash
调用的函数:
all+=
new_IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);
在此,我们可以看到
C#
和
Flash
进行通信还是相当方便的。
除此之外,我顺便搜索到其他一些和
flash
有关的不错的文章:
hFlashRemoting
/aspnet/
/aspnet/
FlashGUIforyourexeusingminimalisticapproach(C++)
/useritems/
主程序端(C#winform):
vie(0,ath+"/");
nction(" returntype=/"xml/"> flash端: ①添加一个文本框text_txt以显示效果或用trace("call:"+result+"") ②ActionScript代码为,其中result只是参数,而主程序端使用AS的函数时不需要关心参数名,只 有知道有参数个数,或参数位置 functiontest(result:Object):Void{ test_=result; } lback("test",this,test);
发布评论