C# flash想到調用函數解決辦法

人文精神  >>>  技術的天空 溫和的思緒

  在VS2005工具箱中“選擇項”-> “COM”中首先選擇“Microsoft Multimedia Control 6.0”假如沒有這個“Microsoft Multimedia Control 6.0”,請先注冊“ MCI32.OCX”,然后在添加“Shockwave Flash Object”
新建一個工程,在工具箱上單擊右鍵,選擇"添加/移除項",在com組件列表中選擇Shockwave Flash Object,然后確定,加載Flash控件到工具箱

選擇工具箱上的Flash控件,放到窗體上并調整好大小

在Form_Load()中加入如下代碼

axShockwaveFlash1.Movie =@"D:\menu.swf"; //這里一定要寫絕對地址
axShockwaveFlash1.Menu =
false;          //是否在Flash動畫播放中關閉右鍵菜單
axShockwaveFlash1.Playing =
true;       //是否讓動畫播放


------------------------FLASH制作過程-----------------------
制作一個FLASH按鈕,并在按鈕上添加如下代碼
on (release) {
fscommand ("Send Action");
}
生成SWF文件
-----------------------------------------------------------------------

在FLASH控件的FSCommand事件中添加如下代碼
if(e.command ==
"Send Action")
MessageBox.Show(
"調用FLASH按鈕事件成功") ;

-----------------------------------------------------------------------

如果該事件處理函數的 EventArgs 為 e, 則有如下對應關系:

e.command -> flash 中調用 FSCommand 時的 command 參數;
e.args -> flash 中調用 FSCommand 時的 arguments 參數。

在 C# 中往 Flash 傳遞數值用 SetVariable 方法:

 

axShockwaveFlash1.SetVariable("variablename", "valueasstring");

 

對應的,有一個 GetVariable 方法可以獲得 flash 中的變量值。

FSCommand 的參數只能傳遞一個,所以其功能存在一定的局限性。在你需要傳遞多個參數的時候,則需要在調用方用字符串拼接各個參數值,然后在被調用方重新解開。這種辦法使得復雜的傳值顯得很丑陋。

不過,除了 FSCommand 外,我們還有另一種辦法和 flash 通信,就是使用 Flash Player 8 External API.
(http://www.codeproject.com/cs/media/flashexternalapi.asp)

使用 External API,可以實現 ActionScript 和 C# 的雙向調用。其好處就在于每次調用時的參數和返回值都通過一個 xml 文檔來傳遞,這樣就比 FSCommand 功能完善了很多。當然在 C# 中,我們也需要聲明一下外部函數實現的對應關系。

代碼片段:
Flash ActionScript 中聲明提供給 hosting application 調用的回調函數:

 

import flash.external.ExternalInterface;
ExternalInterface.addCallback(
"loadAndPlayVideo", null, loadAndPlayVideo);

 

C# 中調用 Flash 的情形:

 

      flashPlayer.CallFunction("" +
          " name=\"loadAndPlayVideo\" returntype=\"xml\">
          <arguments><string>" + fileDialog.FileName +
          "");

 

在 ActionScript 中調用 C# 函數:

 

ExternalInterface.call("ResizePlayer",
       videoPlayer.metadata.width, videoPlayer.metadata.height);

 

在 C# 中聲明被 Flash 調用的函數:

 

flashPlayer.FlashCall +=
  new _IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);

 

在此,我們可以看到 C# 和 Flash 進行通信還是相當方便的。

除此之外,我順便搜索到其他一些和 flash 有關的不錯的文章:

Flash and .NET with FlashRemoting
http://www.codeproject.com/aspnet/FlashRemoting.asp

Multiple File Upload With Progress Bar Using Flash and ASP.NET
http://www.codeproject.com/aspnet/FlashUpload.asp

Flash GUI for your exe using minimalistic approach (C++)
http://www.codeproject.com/useritems/FlashGui.asp

 

轉自:http://hi.baidu.com/116389199/blog/item/72c4da5d139e5644faf2c0f8.html

 


網載 2012-06-18 22:08:05

[新一篇] 考研經驗談

[舊一篇] FLV視頻轉換的利器 - ffmpeg.exe和mencoder(轉)
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表