asp.net Flash 控件
使用了 SWFObject.js http://blog.deconcept.com/swfobject/
SWFObject.js 的功能很丰富,改写为控件可以更方便的调用。
样例下载
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Design;
using System.Web.UI.Design;
using System.IO;
using System.Collections;
using System.ComponentModel.Design;
[assembly: TagPrefix("Flash", "Flash")]
[assembly: WebResource("Flash.Flash.js", "application/x-javascript")]
namespace Flash
{
#region 参数项
/// <summary>
/// 参数项。
/// </summary>
[DefaultProperty("Name")]
[ToolboxData("<{0}:FlashItem />")]
public class FlashItem : IStateManager
{
public FlashItem()
: this("", "")
{
}
/// <summary>
/// 构造函数。
/// </summary>
/// <param name="name">名称</param>
/// <param name="value">值</param>
public FlashItem(string name, string value)
{
this.Name = name;
this.Value = value;
}
/// <summary>
/// 名称。
/// </summary>
[DefaultValue("")]
[Description("名称")]
public string Name
{
get { return ViewState["Name"] is string ? (string)ViewState["Name"] : string.Empty; }
set { ViewState["Name"] = value; }
}
/// <summary>
/// 值。
/// </summary>
[DefaultValue("")]
[Description("值")]
public string Value
{
get { return ViewState["Value"] is string ? (string)ViewState["Value"] : string.Empty; }
set { ViewState["Value"] = value; }
}
public override string ToString()
{
return string.IsNullOrEmpty(Name) ? "Item" : Name;
}
#region 视图
private bool marked;
private StateBag viewState;
internal void LoadViewState(object state)
{
if (state != null)
((IStateManager)this.ViewState).LoadViewState(state);
}
internal object SaveViewState()
{
if (this.viewState == null)
return null;
else
return ((IStateManager)this.viewState).SaveViewState();
}
internal void TrackViewState()
{
this.marked = true;
if (this.viewState != null)
((IStateManager)this.viewState).TrackViewState();
}
internal StateBag ViewState
{
get
{
if (this.viewState == null)
{
this.viewState = new StateBag();
if (((IStateManager)this).IsTrackingViewState)
((IStateManager)this.viewState).TrackViewState();
}
return this.viewState;
}
}
internal bool IsTrackingViewState
{
get { return this.marked; }
}
internal void SetDirty()
{
this.ViewState.SetDirty(true);
}
void IStateManager.LoadViewState(object savedState)
{
this.LoadViewState(savedState);
}
object IStateManager.SaveViewState()
{
return this.SaveViewState();
}
void IStateManager.TrackViewState()
{
this.TrackViewState();
}
bool IStateManager.IsTrackingViewState
{
get { return this.IsTrackingViewState; }
}
#endregion
}
#endregion
[DefaultProperty("Src")]
[Designer(typeof(Flash.Designer))]
[ToolboxData("<{0}:Flash runat=\"server\" Width=\"125px\" Height=\"50px\"></{0}:Flash>")]
[ParseChildren(true)]
public class Flash : WebControl
{
#region 参数集合
/// <summary>
/// 参数集合。
/// </summary>
public class FlashItemCollection : StateManagedCollection
{
public FlashItem this[int index]
{
get { return (this[index] as FlashItem); }
set { this[index] = value; }
}
public int Add(FlashItem value)
{
return ((IList)this).Add(value);
}
public bool Contains(FlashItem value)
{
return ((IList)this).Contains(value);
}
public void CopyTo(FlashItem[] array, int index)
{
base.CopyTo(array, index);
}
public int IndexOf(FlashItem value)
{
return ((IList)this).IndexOf(value);
}
public void Remove(FlashItem value)
{
((IList)this).Remove(value);
}
public void RemoveAt(int index)
{
((IList)this).RemoveAt(index);
}
protected override void SetDirtyObject(object o)
{
(o as FlashItem).SetDirty();
}
}
#endregion
#region 视图刷新
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
object[] objArray = (object[])savedState;
base.LoadViewState(objArray[0]);
((IStateManager)this.Variables).LoadViewState(objArray[1]);
((IStateManager)this.Params).LoadViewState(objArray[2]);
}
}
protected override object SaveViewState()
{
return new object[] { base.SaveViewState(), ((IStateManager)this.Variables).SaveViewState(), ((IStateManager)this.Params).SaveViewState() };
}
protected override void TrackViewState()
{
base.TrackViewState();
((IStateManager)this.Variables).TrackViewState();
((IStateManager)this.Params).TrackViewState();
}
#endregion
public Flash()
: base(HtmlTextWriterTag.Div)
{
}
public class Designer : ControlDesigner
{
public override string GetDesignTimeHtml()
{
Flash component = (Flash)base.Component;
if (component.Width == Unit.Empty)
component.Style.Add(HtmlTextWriterStyle.Width, "100%");
else
component.Style.Remove(HtmlTextWriterStyle.Width);
HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());
component.RenderControl(writer);
return writer.InnerWriter.ToString();
}
}
/// <summary>
/// 窗口模式。
/// </summary>
public enum WmodeType
{
/// <summary>
/// 窗口
/// </summary>
Window,
/// <summary>
/// 透明
/// </summary>
Transparent
}
/// <summary>
/// 品质。
/// </summary>
public enum QualityType
{
/// <summary>
/// 低
/// </summary>
Low,
/// <summary>
/// 自动低
/// </summary>
Autolow,
/// <summary>
/// 自动高
/// </summary>
Autohigh,
/// <summary>
/// 高
/// </summary>
High
}
private FlashItemCollection variables = null;
/// <summary>
/// 传递参数。
/// </summary>
[Description("传递参数。")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[MergableProperty(false)]
[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
[DefaultValue((string)null)]
public FlashItemCollection Variables
{
get
{
if (variables == null)
{
variables = new FlashItemCollection();
if (base.IsTrackingViewState)
((IStateManager)(variables)).TrackViewState();
}
return variables;
}
}
private FlashItemCollection _params = null;
/// <summary>
/// 属性参数。
/// </summary>
[Description("属性参数。")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[MergableProperty(false)]
[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
[DefaultValue((string)null)]
public FlashItemCollection Params
{
get
{
if (_params == null)
{
_params = new FlashItemCollection();
if (base.IsTrackingViewState)
((IStateManager)(_params)).TrackViewState();
}
return _params;
}
}
/// <summary>
/// Flash 文件地址。
/// </summary>
[DefaultValue("")]
[Category("Flash")]
[Description("Flash 文件地址。")]
[Editor("System.Web.UI.Design.UrlEditor, System.Design", typeof(UITypeEditor))]
[UrlProperty]
public string Src
{
get { return ViewState["Src"] is string ? (string)ViewState["Src"] : string.Empty; }
set { ViewState["Src"] = value; }
}
/// <summary>
/// Flash 版本号。
/// </summary>
[DefaultValue(8)]
[Category("Flash")]
[Description("Flash 版本号。")]
public int Version
{
get { return ViewState["Version"] is int ? (int)ViewState["Version"] : 8; }
set { ViewState["Version"] = value; }
}
/// <summary>
/// 显示菜单。
/// </summary>
[DefaultValue(true)]
[Category("Flash")]
[Description("显示菜单。")]
public bool Menu
{
get { return ViewState["Menu"] is bool ? (bool)ViewState["Menu"] : true; }
set { ViewState["Menu"] = value; }
}
/// <summary>
/// 窗口模式。
/// </summary>
[DefaultValue(WmodeType.Window)]
[Category("Flash")]
[Description("窗口模式。")]
public WmodeType Wmode
{
get { return ViewState["Wmode"] is WmodeType ? (WmodeType)ViewState["Wmode"] : WmodeType.Window; }
set { ViewState["Wmode"] = value; }
}
/// <summary>
/// 品质。
/// </summary>
[DefaultValue(QualityType.High)]
[Category("Flash")]
[Description("品质。")]
public QualityType Quality
{
get { return ViewState["Quality"] is QualityType ? (QualityType)ViewState["Quality"] : QualityType.High; }
set { ViewState["Quality"] = value; }
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Page.ClientScript.RegisterClientScriptResource(typeof(Flash), "Flash.Flash.js");
}
/// <summary>
/// Script 字符编码。
/// </summary>
/// <param name="s">要编码的字符</param>
/// <returns>返回已编码的字符。</returns>
private string ScriptEncode(string s)
{
if (string.IsNullOrEmpty(s))
return s;
else
return s.Replace("\\", "\\\\").Replace("\r", "\\r").Replace("\n", "\\n").Replace("\b", "\\b").Replace("\f", "\\f").Replace("\t", "\\t").Replace("/", "\\/").Replace("'", "\\'").Replace("\"", "\\\"");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");
writer.RenderBeginTag(HtmlTextWriterTag.Script);
writer.Write("var {0}_SWFObject = new SWFObject('{1}', '{0}_SWF', '{2}', '{3}', '{4}', '{5}');\n", ClientID, ScriptEncode(Page.ResolveUrl(Src)), Width, Height, Version, ColorTranslator.ToHtml(BackColor));
writer.Write("{0}_SWFObject.addParam('wmode', '{1}');\n", ClientID, Wmode);
writer.Write("{0}_SWFObject.addParam('menu', '{1}');\n", ClientID, Menu);
writer.Write("{0}_SWFObject.addParam('quality', '{1}');\n", ClientID, Quality);
//遍历属性参数
foreach (FlashItem i in Params)
{
writer.Write("{0}_SWFObject.addParam('{1}', '{2}');\n", ClientID, ScriptEncode(i.Name), ScriptEncode(i.Value));
}
//遍历传递参数
foreach (FlashItem i in Variables)
{
writer.Write("{0}_SWFObject.addVariable('{1}', '{2}');\n", ClientID, ScriptEncode(i.Name), ScriptEncode(i.Value));
}
writer.Write("{0}_SWFObject.write('{0}');", ClientID);
writer.RenderEndTag();
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Design;
using System.Web.UI.Design;
using System.IO;
using System.Collections;
using System.ComponentModel.Design;
[assembly: TagPrefix("Flash", "Flash")]
[assembly: WebResource("Flash.Flash.js", "application/x-javascript")]
namespace Flash
{
#region 参数项
/// <summary>
/// 参数项。
/// </summary>
[DefaultProperty("Name")]
[ToolboxData("<{0}:FlashItem />")]
public class FlashItem : IStateManager
{
public FlashItem()
: this("", "")
{
}
/// <summary>
/// 构造函数。
/// </summary>
/// <param name="name">名称</param>
/// <param name="value">值</param>
public FlashItem(string name, string value)
{
this.Name = name;
this.Value = value;
}
/// <summary>
/// 名称。
/// </summary>
[DefaultValue("")]
[Description("名称")]
public string Name
{
get { return ViewState["Name"] is string ? (string)ViewState["Name"] : string.Empty; }
set { ViewState["Name"] = value; }
}
/// <summary>
/// 值。
/// </summary>
[DefaultValue("")]
[Description("值")]
public string Value
{
get { return ViewState["Value"] is string ? (string)ViewState["Value"] : string.Empty; }
set { ViewState["Value"] = value; }
}
public override string ToString()
{
return string.IsNullOrEmpty(Name) ? "Item" : Name;
}
#region 视图
private bool marked;
private StateBag viewState;
internal void LoadViewState(object state)
{
if (state != null)
((IStateManager)this.ViewState).LoadViewState(state);
}
internal object SaveViewState()
{
if (this.viewState == null)
return null;
else
return ((IStateManager)this.viewState).SaveViewState();
}
internal void TrackViewState()
{
this.marked = true;
if (this.viewState != null)
((IStateManager)this.viewState).TrackViewState();
}
internal StateBag ViewState
{
get
{
if (this.viewState == null)
{
this.viewState = new StateBag();
if (((IStateManager)this).IsTrackingViewState)
((IStateManager)this.viewState).TrackViewState();
}
return this.viewState;
}
}
internal bool IsTrackingViewState
{
get { return this.marked; }
}
internal void SetDirty()
{
this.ViewState.SetDirty(true);
}
void IStateManager.LoadViewState(object savedState)
{
this.LoadViewState(savedState);
}
object IStateManager.SaveViewState()
{
return this.SaveViewState();
}
void IStateManager.TrackViewState()
{
this.TrackViewState();
}
bool IStateManager.IsTrackingViewState
{
get { return this.IsTrackingViewState; }
}
#endregion
}
#endregion
[DefaultProperty("Src")]
[Designer(typeof(Flash.Designer))]
[ToolboxData("<{0}:Flash runat=\"server\" Width=\"125px\" Height=\"50px\"></{0}:Flash>")]
[ParseChildren(true)]
public class Flash : WebControl
{
#region 参数集合
/// <summary>
/// 参数集合。
/// </summary>
public class FlashItemCollection : StateManagedCollection
{
public FlashItem this[int index]
{
get { return (this[index] as FlashItem); }
set { this[index] = value; }
}
public int Add(FlashItem value)
{
return ((IList)this).Add(value);
}
public bool Contains(FlashItem value)
{
return ((IList)this).Contains(value);
}
public void CopyTo(FlashItem[] array, int index)
{
base.CopyTo(array, index);
}
public int IndexOf(FlashItem value)
{
return ((IList)this).IndexOf(value);
}
public void Remove(FlashItem value)
{
((IList)this).Remove(value);
}
public void RemoveAt(int index)
{
((IList)this).RemoveAt(index);
}
protected override void SetDirtyObject(object o)
{
(o as FlashItem).SetDirty();
}
}
#endregion
#region 视图刷新
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
object[] objArray = (object[])savedState;
base.LoadViewState(objArray[0]);
((IStateManager)this.Variables).LoadViewState(objArray[1]);
((IStateManager)this.Params).LoadViewState(objArray[2]);
}
}
protected override object SaveViewState()
{
return new object[] { base.SaveViewState(), ((IStateManager)this.Variables).SaveViewState(), ((IStateManager)this.Params).SaveViewState() };
}
protected override void TrackViewState()
{
base.TrackViewState();
((IStateManager)this.Variables).TrackViewState();
((IStateManager)this.Params).TrackViewState();
}
#endregion
public Flash()
: base(HtmlTextWriterTag.Div)
{
}
public class Designer : ControlDesigner
{
public override string GetDesignTimeHtml()
{
Flash component = (Flash)base.Component;
if (component.Width == Unit.Empty)
component.Style.Add(HtmlTextWriterStyle.Width, "100%");
else
component.Style.Remove(HtmlTextWriterStyle.Width);
HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());
component.RenderControl(writer);
return writer.InnerWriter.ToString();
}
}
/// <summary>
/// 窗口模式。
/// </summary>
public enum WmodeType
{
/// <summary>
/// 窗口
/// </summary>
Window,
/// <summary>
/// 透明
/// </summary>
Transparent
}
/// <summary>
/// 品质。
/// </summary>
public enum QualityType
{
/// <summary>
/// 低
/// </summary>
Low,
/// <summary>
/// 自动低
/// </summary>
Autolow,
/// <summary>
/// 自动高
/// </summary>
Autohigh,
/// <summary>
/// 高
/// </summary>
High
}
private FlashItemCollection variables = null;
/// <summary>
/// 传递参数。
/// </summary>
[Description("传递参数。")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[MergableProperty(false)]
[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
[DefaultValue((string)null)]
public FlashItemCollection Variables
{
get
{
if (variables == null)
{
variables = new FlashItemCollection();
if (base.IsTrackingViewState)
((IStateManager)(variables)).TrackViewState();
}
return variables;
}
}
private FlashItemCollection _params = null;
/// <summary>
/// 属性参数。
/// </summary>
[Description("属性参数。")]
[PersistenceMode(PersistenceMode.InnerProperty)]
[MergableProperty(false)]
[Editor(typeof(CollectionEditor), typeof(UITypeEditor))]
[DefaultValue((string)null)]
public FlashItemCollection Params
{
get
{
if (_params == null)
{
_params = new FlashItemCollection();
if (base.IsTrackingViewState)
((IStateManager)(_params)).TrackViewState();
}
return _params;
}
}
/// <summary>
/// Flash 文件地址。
/// </summary>
[DefaultValue("")]
[Category("Flash")]
[Description("Flash 文件地址。")]
[Editor("System.Web.UI.Design.UrlEditor, System.Design", typeof(UITypeEditor))]
[UrlProperty]
public string Src
{
get { return ViewState["Src"] is string ? (string)ViewState["Src"] : string.Empty; }
set { ViewState["Src"] = value; }
}
/// <summary>
/// Flash 版本号。
/// </summary>
[DefaultValue(8)]
[Category("Flash")]
[Description("Flash 版本号。")]
public int Version
{
get { return ViewState["Version"] is int ? (int)ViewState["Version"] : 8; }
set { ViewState["Version"] = value; }
}
/// <summary>
/// 显示菜单。
/// </summary>
[DefaultValue(true)]
[Category("Flash")]
[Description("显示菜单。")]
public bool Menu
{
get { return ViewState["Menu"] is bool ? (bool)ViewState["Menu"] : true; }
set { ViewState["Menu"] = value; }
}
/// <summary>
/// 窗口模式。
/// </summary>
[DefaultValue(WmodeType.Window)]
[Category("Flash")]
[Description("窗口模式。")]
public WmodeType Wmode
{
get { return ViewState["Wmode"] is WmodeType ? (WmodeType)ViewState["Wmode"] : WmodeType.Window; }
set { ViewState["Wmode"] = value; }
}
/// <summary>
/// 品质。
/// </summary>
[DefaultValue(QualityType.High)]
[Category("Flash")]
[Description("品质。")]
public QualityType Quality
{
get { return ViewState["Quality"] is QualityType ? (QualityType)ViewState["Quality"] : QualityType.High; }
set { ViewState["Quality"] = value; }
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Page.ClientScript.RegisterClientScriptResource(typeof(Flash), "Flash.Flash.js");
}
/// <summary>
/// Script 字符编码。
/// </summary>
/// <param name="s">要编码的字符</param>
/// <returns>返回已编码的字符。</returns>
private string ScriptEncode(string s)
{
if (string.IsNullOrEmpty(s))
return s;
else
return s.Replace("\\", "\\\\").Replace("\r", "\\r").Replace("\n", "\\n").Replace("\b", "\\b").Replace("\f", "\\f").Replace("\t", "\\t").Replace("/", "\\/").Replace("'", "\\'").Replace("\"", "\\\"");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");
writer.RenderBeginTag(HtmlTextWriterTag.Script);
writer.Write("var {0}_SWFObject = new SWFObject('{1}', '{0}_SWF', '{2}', '{3}', '{4}', '{5}');\n", ClientID, ScriptEncode(Page.ResolveUrl(Src)), Width, Height, Version, ColorTranslator.ToHtml(BackColor));
writer.Write("{0}_SWFObject.addParam('wmode', '{1}');\n", ClientID, Wmode);
writer.Write("{0}_SWFObject.addParam('menu', '{1}');\n", ClientID, Menu);
writer.Write("{0}_SWFObject.addParam('quality', '{1}');\n", ClientID, Quality);
//遍历属性参数
foreach (FlashItem i in Params)
{
writer.Write("{0}_SWFObject.addParam('{1}', '{2}');\n", ClientID, ScriptEncode(i.Name), ScriptEncode(i.Value));
}
//遍历传递参数
foreach (FlashItem i in Variables)
{
writer.Write("{0}_SWFObject.addVariable('{1}', '{2}');\n", ClientID, ScriptEncode(i.Name), ScriptEncode(i.Value));
}
writer.Write("{0}_SWFObject.write('{0}');", ClientID);
writer.RenderEndTag();
}
}
}
浙公网安备 33010602011771号