Media Player 与 Flash 之类在网页上执行的外挂控件,都是属于 ActiveX 控件,它们套用在 HTML 码中的方式差不多,除了要指定 ClassID 以外,ActiveX 使用的参数(相当于 ActiveX 控件的属性)以 Param Tag 来表示。本文标题命名为「ActiveX 服务器控件」就是避免误解为 ActiveX 控件,而是在 ASP.NET 中输出 ActiveX 相关 HTML 码的服务器控件;我们可透过 ActiveX 服务器控件可以用来输出网页上引用 ActiveX 的通用 HTML 码,另外 ActiveX 的参数会以集合属性来呈现,所以也会一并学习到集合属性的撰写方式。

程序代码下载:ASP.NET Server Control - Day11.rar

 

一、集合属性

ActiveX 的 Param 参数是集合属性,所以我们定义了 TBActiveParam 类别描述 ActiveX 参数,包含 Name 及 Value 属性;而 TBActiveXParamCollection 为 TBActiveParam 的集合类别,用来描述 ActiveX 参数集合。TBActiveXParamCollection 继承 CollectionBase,加入操作集合的 Add、Insert、Remove、IndexOf、Contains 等方法,关于集合属性的用法可以参阅笔者在部落格的「撰写服务器控件的集合属性 (CollectionBase)」一文中有详细说明。

 

image

 

二、实作 ActiveX 服务器控件

step1. 新增继承 WebControl TBActiveX

 

step2. 覆写 TagKey 属性,传回 object Tag

        Protected Overrides ReadOnly Property TagKey() As HtmlTextWriterTag
            Get
                Return HtmlTextWriterTag.Object
            End Get
        End Property

 

step3. 新增 ClassId 属性,描述 ActiveX ClassId

定义 ClassId 属性,并覆写 AddAttributesToRender 来输出此属性。

        ''' <summary>
        ''' 覆寫 AddAttributesToRender 方法。
        ''' </summary>
        Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter)
            '加入 MediaPlayer ActiveX 元件的 classid
            writer.AddAttribute("classid", String.Format("clsid:{0}", Me.ClassId))
            MyBase.AddAttributesToRender(writer)
        End Sub

 

step4. 新增 Params 属性,描述 ActiveX 的参数集合。

定义 Params 属性,型别为 TBActiveXParamCollection 类别,套用 EditorAttribute 设定 CollectionEditor 为集合编辑器。

        ''' <summary>
        ''' ActiveX 控制項參數集合。
        ''' </summary>
        < _
        Description("控制項參數集合。"), _
        PersistenceMode(PersistenceMode.InnerProperty), _
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
        Editor(GetType(CollectionEditor), GetType(UITypeEditor)) _
        > _
        Public ReadOnly Property Params() As TBActiveXParamCollection
            Get
                If FParams Is Nothing Then
                    FParams = New TBActiveXParamCollection()
                End If
                Return FParams
            End Get
        End Property

 

 

当编辑 Params 时,会使用的 CollectionEditor 集合编辑器。

image

 

step5. 输出 ActiveX 参数

覆写 CreateChildControls 方法,在此方法依 Params 集合属性定义依序来输出 ActiveX  的参数集合。

        Private Sub AddParam(ByVal Name As String, ByVal Value As String)
            Dim oParam As HtmlControls.HtmlGenericControl
 
            oParam = New HtmlControls.HtmlGenericControl("param")
            oParam.Attributes.Add("name", Name)
            oParam.Attributes.Add("value", Value)
            Me.Controls.Add(oParam)
        End Sub
 
        ''' <summary>
        ''' 建立子控制項。
        ''' </summary>
        Protected Overrides Sub CreateChildControls()
            Dim oParam As TBActiveXParam
 
            '加入 ActiveX 參數集合
            For Each oParam In Me.Params
                AddParam(oParam.Name, oParam.Value)
            Next
            MyBase.CreateChildControls()
        End Sub

 

 

三、执行程序

上一篇我们使用 TBMediaPlayer 控件来设定 Media Player,在此我们改用 TBActiveX 控件来设定 Media Player,一样可以呈现相同的结果。

        <bee:TBActiveX ID="TBActiveX1" runat="server" 
            ClassId="6BF52A52-394A-11D3-B153-00C04F79FAA6" Height="250px" Width="250px">
            <Params>
                <bee:TBActiveXParam Name="URL" Value="d:/Movie_01.wmv" />
                <bee:TBActiveXParam Name="autoStart" Value="true" />
            </Params>
        </bee:TBActiveX>

 

 

备注:本文同步发布于「第一届iT邦帮忙铁人赛」,如果你觉得这篇文章对您有帮助,记得连上去推鉴此文增加人气 ^^
http://ithelp.ithome.com.tw/question/10012159

posted on 2008-10-14 12:47  jeff377  阅读(1572)  评论(0编辑  收藏  举报