编写一个Flash播放器的WebPart

***********************************************************************************
*                  版权声明                        
*         此文章为ocean所有,版权归ocean所有,任何网站
*和 媒体转载必须包含此段声明,否则将视为侵权,作者将 
* 保留一切权力。此声明为此文章中不可或缺的一部分。 
* 作者网名:ocean                                  
* 作者email: ocean@forever.net.cn                  
* 作者网站: http://www.oceanstudio.net             
*                     http://sps.oceanstudio.net             
* 作者blog:博客园, http://www.cnblogs.com/ocean  
*                 ocean's blog, http://www.oceanstudio.net/sps/blog 
* 此文章发表时间:2005年2月3日                     
* 此文章源: http://www.cnblogs.com/ocean/archive/2005/02/03/101434.html                                      
************************************************************************************


这个WebPart 点击此处下载,带源码。

 点击此处察看效果演示

最近看到一个老外写的一个Flash播放器的WebPart,感觉这些WebPart写起来很简单,正好也希望给初学者介绍一下如何进行WebPart的开发。我也没写过几个WebPart,因为实际上WebPart的开发是师傅领进门,修行在个人。很多初学Sharepoint的对WebPart开发摸不着头脑。实际WebPart写起来很简单,但是准备工作比较复杂,包括安装模板,引用dll,部署,调试等。这些东西我在后面的一篇文章中会介绍。另外就是WebPart的开发需要多看看sharepoint的sdk,里面讲解了组件模型,如果你的WebPart不引用任何SPS库对象(比如这个Flash WebPart),那么写起来就更简单了。

首先如何写WebPart,在新建了一个WebPart的项目之后,默认就生成了一个WebPart,这个WebPart本身就能够编译成功,当然这个WebPart是一个空的WebPart。什么功能也没有。

WebPart的呈现是靠RenderWebPart这个方法实现的,这个方法有一个output参数,只要通过output将需要呈现的HTML输出出来就可以了。熟悉asp的朋友可能很熟悉这种方式,就像用asp的Response一样。因为WebPart的呈现无法用可视化的开发。当然利用Kaneboy做的用户控件包装器可以简单的将一个用户控件包装成WebPart。

OK,那么该如何呈现呢,其实Flash的呈现代码很简单,就是输出一个object标签,然后设置flash的url、width、height等属性。那么我们需要设置哪几个属性呢?是Flash url、Width、Height、Quality、CabVersion(CAB的版本)这五个属性。

这五个属性定义如下:

 

None.gif private   string  url  =   "" ;
None.gif        [Browsable(
true ),
None.gif        Category(
" Flash属性 " ),
None.gif        DefaultValue(
"" ),
None.gif        WebPartStorage(Storage.Personal),
None.gif        FriendlyName(
" Flash Url " ),
None.gif        Description(
" Flash动画的Url " )]
None.gif        
public   string  Url
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return url;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                url 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif        
None.gif
None.gif        
private   int  width  =   100 ;
None.gif        [Browsable(
true ),
None.gif        Category(
" Flash属性 " ),
None.gif        DefaultValue(
100 ),
None.gif        WebPartStorage(Storage.Personal),
None.gif        FriendlyName(
" Flash的显示宽度(px,0表示原大小) " ),
None.gif        Description(
" Flash动画的宽度 " )]
None.gif        
public   int  FlashWidth
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return width;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                width 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   int  height  =   100 ;
None.gif        [Browsable(
true ),
None.gif        Category(
" Flash属性 " ),
None.gif        DefaultValue(
100 ),
None.gif        WebPartStorage(Storage.Personal),
None.gif        FriendlyName(
" Flash的显示高度(px,0表示原大小) " ),
None.gif        Description(
" Flash动画的高度 " )]
None.gif        
public   int  FlashHeight
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return height;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                height 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   string  quality  =   " high " ;
None.gif        [Browsable(
true ),
None.gif        Category(
" Flash属性 " ),
None.gif        DefaultValue(
" high " ),
None.gif        WebPartStorage(Storage.Personal),
None.gif        FriendlyName(
" Flash显示质量 " ),
None.gif        Description(
" Flash动画的显示质量 " )]
None.gif        
public   string  Quality
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return quality;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                quality 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   string  cabversion  =   " 7,0,0,0 " ;
None.gif        [Browsable(
true ),
None.gif        Category(
" Flash属性 " ),
None.gif        DefaultValue(
" 7,0,0,0 " ),
None.gif        WebPartStorage(Storage.Personal),
None.gif        FriendlyName(
" Flash的CAB版本 " ),
None.gif        Description(
" Flash的CAB版本 " )]
None.gif        
public   string  CabVersion
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return cabversion;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                cabversion 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

 

默认的时候有一个Text属性,只要照猫画虎就可以了。每个属性前有一堆属性修饰。这些属性不用讲也能猜得出来意思。

然后最终的呈现代码如下:

ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
InBlock.gif        
/// Render this Web Part to the output parameter specified.
InBlock.gif        
/// </summary>
ExpandedBlockEnd.gif        
/// <param name="output"> The HTML writer to write out to </param>

None.gif          protected   override   void  RenderWebPart(HtmlTextWriter output)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
try 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (this.url.Trim() == ""
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    output.Write(SPEncode.HtmlEncode(
"请选择要显示的Flash动画"));
ExpandedSubBlockEnd.gif                }

InBlock.gif                
else 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    output.Write(
"<OBJECT classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=");
InBlock.gif
                    output.Write(SPEncode.HtmlEncode(this.cabversion) + "\" ");
InBlock.gif
                    output.Write(" WIDTH=\"" + this.width + "\" ");
InBlock.gif                    output.Write(
" \"HEIGHT=\"" + this.height + "\">");
InBlock.gif
                    output.Write("<PARAM NAME=movie VALUE=\"" + SPEncode.HtmlEncode(this.url) + "\"><PARAM NAME=quality VALUE=" + SPEncode.HtmlEncode(this.quality) + "><param name=wmode value=opaque>");
InBlock.gif                    output.Write(
"<EMBED src=\"" + SPEncode.HtmlEncode(this.url) + "\" quality=" + SPEncode.HtmlEncode(this.quality));
InBlock.gif                    output.Write(
" WIDTH=\"" + this.width + "\" ");
InBlock.gif                    output.Write(
" HEIGHT=\"" + this.height + "\" ");
InBlock.gif                    output.Write(
" TYPE=\"application/x-shockwave-flash\" PLUGINSPAGE=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\"></EMBED></OBJECT>");
ExpandedSubBlockEnd.gif
                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (Exception e) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                output.Write(
"有错误发生:" + e.Message);
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }


其中注意是当Url为空的时候提示一个需要设置属性的信息。另外就是捕获一下异常。

一个WebPart就这么轻轻松松完成了,然后就是部署了。关于WebPart的强签名和部署,我将在以后的Blog中讲。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值