Adobe FLASHを.net上で表示し、かつ、その背景を透明にする方法を記載します。
実行時の様子
FLASHをフォームに張り付つけ、かつFLASHの背景ごと透明化しております。
FLASH(ActionScript)にはAlternativa3Dというライブラリが使用されています。
Stage3Dでは透明化できないと予測していたのですが、問題なく透明化できるようです。
もちろん、Stage3Dを使用しない通常の2D FLASHでも透明化できます。
ちなみにここで採用した方法は、フォームにWebBrowserコントロールを張り付け、
WebBrowserにFLASHを張り付けるタグを書いて、FLASHをロードして表示しております。
これ以外の方法(ActiveX:Shockwave Flash Objectを張り付ける方法)においては
Win32APIを使用するなどあらゆる透明化を試してみたのですが、ことごとく失敗しました。
また問題点としては、FLASH内の透明部分との境界がシャギります。
Windows XPだとかなりシャギり、Windows 7だとまぁまぁシャギります。
ちなみに添付するFLASHのサンプルは、どこかのパクリです。
引用元を忘れてしまいましたが、問題ありましたらご連絡ください。即座に削除します。
FLASHの透明化については、世界中のグーグル先生に聞いても教えてくれませんでした。
本当に苦労しました。これくらいやりたい人がいてもおかしくないのに。
実行環境
・Internet Explorer 8
・Adobe Flash Player 11
・Microsoft Visual Studio 2008 Professional(VB.NET)
・.NET Framework 2.0, 3.5
※2003/2005でも、C#でも、それ以降でも同じことができます。
サンプルコードとサンプルプロジェクト
以下にサンプルコードを記載します。
このサンプルコードを含んだプロジェクトは以下からもダウンロードできます。
サンプルプロジェクトのダウンロード
1. |
2. |
3. |
4. |
5. |
6. |
7. |
8. |
9. |
10. |
11. |
12. |
13. |
14. |
15. |
16. |
17. |
18. |
19. |
20. |
21. |
22. |
23. |
24. |
25. |
26. |
27. |
28. |
29. |
30. |
31. |
32. |
33. |
34. |
35. |
36. |
37. |
38. |
39. |
40. |
41. |
42. |
43. |
44. |
45. |
46. |
47. |
48. |
49. |
50. |
51. |
52. |
53. |
54. |
55. |
56. |
57. |
|
Public Class Form1 |
Private m_WebBrowser As WebBrowser |
|
|
Private m_FlashPath As String = System.IO.Path.Combine( _ |
System.IO.Path.GetDirectoryName( _ |
Application.ExecutablePath), "Cubes.swf") |
|
|
Private Const E_TRANSPARENCY_KEY As Integer = &H111111 |
|
Private Sub Form1_Load(ByVal sender As System.Object, _ |
ByVal e As System.EventArgs) Handles MyBase.Load |
|
Me.TransparencyKey = Color.FromArgb(E_TRANSPARENCY_KEY) |
Me.Opacity = 1.0 |
|
|
m_WebBrowser = New WebBrowser |
m_WebBrowser.Dock = DockStyle.Fill |
m_WebBrowser.ScrollBarsEnabled = False |
Me.Controls.Add(m_WebBrowser) |
|
|
|
|
With m_WebBrowser |
|
If .Document Is Nothing Then |
.Navigate("about:blank") |
End If |
|
|
Dim myHtmlDocument As System.Windows.Forms.HtmlDocument = .Document.OpenNew(True) |
If myHtmlDocument Is Nothing Then Return |
|
|
Dim myFlashTags As String = _ |
"<object type=""application/x-shockwave-flash""" + _ |
" width=""100%"" height=""100%"" data=""" + m_FlashPath + """>" + _ |
"<param name=""movie"" value=""" + m_FlashPath + """/>" + _ |
"<param name=""quality"" value=""high""/>" + _ |
"<param name=""wmode"" value=""transparent""/>" + _ |
"<param name=""bgcolor"" value=#""" + _ |
E_TRANSPARENCY_KEY.ToString("X") + """ />" + _ |
"</object>" |
|
|
myHtmlDocument.Write( "<html><body bgcolor=""#" + _ |
E_TRANSPARENCY_KEY.ToString("X") + """>" + myFlashTags + "</body></html>") |
|
Application.DoEvents() |
End With |
|
Application.DoEvents() |
End Sub |
End Class |
|