2007/09/19(Wed) 16:01:44 編集(投稿者)
Flashコンテンツの
●上下左右枠±8ドット近辺を HitTest で検出
●マウスムーブで移動量検出
●ActionScriptでJavaScriptを呼び出す
getURL("JavaScript:window.external.ResizeEvent(x,y)");
で親フォームをリサイズしてあげればいいのかな、たぶん。
マウスオーバー サイズ変更カーソル
マウスアアウト デフォルトカーソル
ドラッグ開始 サイズ変更カーソル
ドラッグ終了 デフォルトカーソル
FlashコンテンツをのっけるWebBrowserクラスのセキュリティレベルを緩和させてあげれば、
フラッシュ(ActionScript)->JavaScript->ブラウザフォーム という連携でリサイズイベント
を起こせます、たぶん。
サンプルではないけど、サンプル:
Flashは借り物なので中身いじれないのでこれと似たような仕組みで実装して下さい。
このサンプルでは、フラッシュのClickイベントが取れないが、mousemove は取れる
のでHitTestした範囲内のフラッシュサイズを変更して、Div タグのドラッグによる
Window サイズ変更を実現しています。サイズ変更ちゅーても、うまくいって2〜3
ドットくらいですけど(ドラッグ操作のデフォルトが範囲選択なのでこれをさせない
ようにするのが・・・挫折w)
VBです。
Imports System
Imports System.Windows.Forms
Imports System.Security.Permissions
Imports System.Text
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class Form1
Private _b As Boolean = False
Private sz As Size
Private webbrowser1 As New WebBrowser()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
WebBrowser1.Dock = DockStyle.Fill
webbrowser1.ScrollBarsEnabled = False
Controls.Add(webbrowser1)
Dim sb As New StringBuilder
sb.Append("<body style='margin:0px;border:solid 1px snow'>")
sb.Append("<div width='100%' height='100%' style='margin:0px;background-color:pink;'")
sb.Append(" onmouseout='window.external.MouseUpEx()'")
sb.Append(" onmousemove='window.external.MouseMoveEx(event.x, event.y, event.button)'")
sb.Append(" onmouseup='window.external.MouseUpEx()'")
sb.Append(" onmousedown='window.external.ClickEx(event.button)'")
sb.Append(" >")
sb.Append("<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' id='FlashContent'")
sb.Append(" codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0'")
sb.Append(" WIDTH='100%' HEIGHT='100%' style='margin:0px;'")
'sb.Append(" onmouseout='window.external.MouseUpEx()'")
'sb.Append(" onmousemove='window.external.MouseMoveEx(event.x, event.y, event.button)'")
'sb.Append(" onmouseup='window.external.MouseUpEx()'")
sb.Append(">")
sb.Append(" <PARAM NAME=movie VALUE='http://hakuhin.hp.infoseek.co.jp/main/as/../../flash/as/menu_02.swf'>")
sb.Append(" <PARAM NAME=loop VALUE=false>")
sb.Append(" <PARAM NAME=quality VALUE=high>")
sb.Append(" <PARAM NAME=bgcolor VALUE=#ffffff>")
sb.Append("</OBJECT>")
sb.Append("</div>")
sb.Append("</body>")
WebBrowser1.DocumentText = sb.ToString()
WebBrowser1.ObjectForScripting = Me
Me.StartPosition = FormStartPosition.Manual
''border:solid 1px snow のコレ(枠表示用に)
Me.Size = New Size(102, 102)
Me.Location = New Point(100, 100)
sz = Me.Size
End Sub
Public Sub MouseMoveEx(ByVal x As Integer, ByVal y As Integer, ByVal b As Integer)
If _b Then
Me.Size = New Size(Me.Size.Width + 1, Me.Size.Height)
End If
Dim sx As Integer = Me.Size.Width - 8
Dim ex As Integer = Me.Size.Width - 1
If x > sx AndAlso x < ex Then
Me.Cursor = Cursors.SizeWE
WebBrowser1.Document.GetElementById("FlashContent").SetAttribute("width", "95%")
Else
Me.Cursor = Cursors.Default
End If
'Console.WriteLine("X:{0},Y:{1},B:{2}", x, y, b)
End Sub
Public Sub ClickEx(ByVal b As Integer)
''Me.Size = New Size(Me.Size.Width + 10, Me.Size.Height)
If b = 1 Then
_b = True
Else
_b = False
End If
End Sub
Public Sub MouseUpEx()
Me.Cursor = Cursors.Default
WebBrowser1.Document.GetElementById("FlashContent").SetAttribute("width", "100%")
_b = False
End Sub
End Class