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();
        }
    }
}

转载于:https://www.cnblogs.com/dao/archive/2008/02/25/1081004.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值