问题描述
用winform加载FLASH,然后想让FLASH以winform为容器,储存在里面,用过EmbedMovie属性,内嵌但是却没有任何效果?请问是怎么回事??
解决方案
解决方案二:
要在c#winform程序里嵌入FLASH,其实就是直接引用Flash的ocx控件。那你就需要使用“COM组件”ShockwaveFlashObject。不过这个"Flash.ocx"控件不能直接在“COM组件”窗口中找到.。需要我们手动添加,选择菜单中的“工具”--“自定义工具箱”,打开“自定义工具箱”窗口,在“COM组件”中点击“浏览”键,然后选择“c:WINNT(WINDOWS)system32MacromedFlashswflash.ocx"控件,确定后在工具箱中就可以看到“FlashFactory”,“ShockwaveFlash”两个新控件添加控件注意我使用的是“xp系统”和FLASH8与flash9都有安装,ShockwaveFlash就是在“C:WINDOWSsystem32MacromedFlash”目录下面(我使用的“Flash9d.ocx”)当你发现你的ShockwaveFlash程序提示你“没有注册”,那你可能缺少了“MicrosoftMultimediaControl,version6.0”控件,可以先添加这个控件到“工具箱”中。这个控件在“C:WINDOWSsystem32MCI32.OCX”,如果没有可以通过百度上网下载一个,我在本机没有找到,就在网上下载了该文件。那我们现在就镶嵌一个FLASH到程序中Movie:flash的存放地址EmbedMovie:是否嵌入到程序的资源中。在InitializeComponent();控件都加载完成后,FlashBox_UI.Movie=Application.StartupPath+"\flashplayer.swf";连接嵌入的SWF文件Form1.cs文件如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceflashShell2{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();FlashBox_UI.Movie=Application.StartupPath+"\flashplayer.swf";}}}---------------------------------flashc#通讯--------------------------------------在Flash的ActionScript中,可以通过FSCommand函数与hostingapp通信,该函数有两个参数,分别是:command:命令名称parameters:参数例子:on(press){fscommand("Circule","Green");}在C#中,处理flash对象的FSCommand事件即可。如果该事件处理函数的EventArgs为e,则有如下对应关系:e.command->flash中调用FSCommand时的command参数;e.args->flash中调用FSCommand时的arguments参数。在C#中往Flash传递数值用SetVariable方法:axShockwaveFlash1.SetVariable("variablename","valueasstring");对应的,有一个GetVariable方法可以获得flash中的变量值。FSCommand的参数只能传递一个,所以其功能存在一定的局限性。在你需要传递多个参数的时候,则需要在调用方用字符串拼接各个参数值,然后在被调用方重新解开。这种办法使得复杂的传值显得很丑陋。不过,除了FSCommand外,我们还有另一种办法和flash通信,就是使用FlashPlayer8ExternalAPI.(http://www.codeproject.com/cs/media/flashexternalapi.asp)使用ExternalAPI,可以实现ActionScript和C#的双向调用。其好处就在于每次调用时的参数和返回值都通过一个xml文档来传递,这样就比FSCommand功能完善了很多。当然在C#中,我们也需要声明一下外部函数实现的对应关系。代码片段:FlashActionScript中声明提供给hostingapplication调用的回调函数:importflash.external.ExternalInterface;ExternalInterface.addCallback("loadAndPlayVideo",null,loadAndPlayVideo);C#中调用Flash的情形:flashPlayer.CallFunction("<invoke"+"name="loadAndPlayVideo"returntype="xml"><arguments><string>"+fileDialog.FileName+"</string></arguments></invoke>");在ActionScript中调用C#函数:ExternalInterface.call("ResizePlayer",videoPlayer.metadata.width,videoPlayer.metadata.height);在C#中声明被Flash调用的函数:flashPlayer.FlashCall+=new_IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);在此,我们可以看到C#和Flash进行通信还是相当方便的。除此之外,我顺便搜索到其他一些和flash有关的不错的文章:Flashand.NETwithFlashRemotinghttp://www.codeproject.com/aspnet/FlashRemoting.aspMultipleFileUploadWithProgressBarUsingFlashandASP.NEThttp://www.codeproject.com/aspnet/FlashUpload.aspFlashGUIforyourexeusingminimalisticapproach(C++)http://www.codeproject.com/useritems/FlashGui.aspC#中的回调函数axShockwaveFlash.FlashCall+=new_IShockwaveFlashEvents_FlashCallEventHandler(SetNum);publicvoidSetNum(objectsender,_IShockwaveFlashEvents_FlashCallEvente){//得到参数列表ArrayListparaList=GetParaList(e.request);}publicArrayListGetParaList(stringParaListXml){XmlDocumentdoc=newXmlDocument();doc.LoadXml(ParaListXml);XmlNodeListpareNodeList=doc.GetElementsByTagName("string");ArrayListparaList=newArrayList();foreach(XmlNodenodeinpareNodeList){paraList.Add(node.InnerText);}returnparaList;}------------------------------------------------------------------------------------------------http://www.jiemengwu.com/http://www.phpzy.com/php/http://www.shopfw.comhttp://www.jqk8.com
解决方案三:
关于如何使用FLASH控件我是清楚的.只是关于内嵌FLASH于winform不知下手EmbedMovie属性的解释:语法:EmbedMovieAsBoolean 说明:影片是否被存贮到控件所在的容器中。当你已载入一个影片后将该属性设为True,播放影片时就不必再去读SWF文件了。这使得在PowerPoint简报或VB程序里使用Flash影片更容易。但将该属性设为True后,控件的Movie属性就不再接受新的值了。要想播放另一个影片(给Movie属性赋新值),必须先将EmbedMovie属性设为False。将EmbedMovie设为true值,还是要读取外部flash