D盘

workspace
posts - 165, comments - 53, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

*存储过程*/
sp_databases --列出服务器上的所有数据库
sp_server_info --列出服务器信息,如字符集,版本和排列顺序
sp_stored_procedures--列出当前环境中的所有存储过程
sp_tables --列出当前环境中所有可以查询的对象
sp_start_job --立即启动自动化任务
sp_stop_job --停止正在执行的自动化任务
sp_password --添加或修改登录帐户的密码
sp_configure --显示(不带选项)或更改(带选项)当前服务器的全局配置设置
sp_help --返回表的列名,数据类型,约束类型等
sp_helptext --显示规则,默认值,未加密的存储过程,用户定义的函数,
--触发器或视图的实际文本
sp_helpfile --查看当前数据库信息
sp_dboption --显示或更改数据库选项
sp_detach_db --分离数据库
sp_attach_db --附加数据库
sp_addumpdevice --添加设备
sp_dropdevice --删除设备
sp_pkeys --查看主键
sp_fkeys --查看外键
sp_helpdb --查看指定数据库相关文件信息
sp_addtype --自建数据类型
sp_droptype --删除自建数据类型
sp_rename --重新命名数据库
sp_executesql --执行SQL语句
sp_addlogin --添加登陆
sp_droplogin --删除登录
sp_grantdbaccess --把用户映射到登录,即添加一个数据库安全帐户并授予塔访问权限
sp_revokedbaccess--撤销用户的数据访问权,即从数据库中删除一个安全帐户
sp_addrole --添加角色
sp_addrolemember --向角色中添加成员,使其成为数据库角色的成员
sp_addsrvrolemember--修改登录使其成为固定服务器角色的成员
sp_grantlogin --允许使用组帐户或系统用户使用Windows身份验证连接到SQL
sp_defaultdb --修改一个登录的默认数据库
sp_helpindex --用于查看表的索引
sp_cursoropen --定义与游标和游标选项相关的SQL语句,然后生成游标
sp_cursorfetch --从游标中提取一行或多行
sp_cursorclose --关闭并释放游标
sp_cursoroption --设置各种游标选项
sp_cursor --用于请求定位更新
sp_cursorprepare --把与游标有关的T-SQL语句或批处理编译成执行计划,但并不创建游标
sp_cursorexecute --从由sp_cursorprepare创建的执行计划中创建并填充游标
sp_cursorunprepare --废弃由sp_cursorprepare生成的执行计划
sp_settriggerorder --指定第一个或最后一个激发的、与表关联的 AFTER 触发器。在第一个
--和最后一个触发器之间激发的 AFTER 触发器将按未定义的顺序执行

posted @ 2008-08-27 17:59 巴西木 阅读(186) | 评论 (0)编辑 收藏

正则表达式英文Regular Expression)),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sedgrep)普及开的。“正则表达式”通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

目录

[隐藏]


一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:
JScript VBScript 匹配
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表:
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} mn 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 xy。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 nm 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm
\nml 如果 n 为八进制数字 (0-3),且 ml 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (©)。


下面看几个例子:
"^The":表示所有以"The"开始的字符串("There","The cat"等);
"of despair$":表示所以以"of despair"结尾的字符串;
"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;
"notice":表示任何包含"notice"的字符串。

'*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或
更多”,“一次或更多”还有“没有或一次”。下面是几个例子:

"ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多;
"ab?":表示一个字符串有一个a后面跟着零个或者一个b;
"a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。

也可以使用范围,用大括号括起,用以表示重复次数的范围。

"ab{2}":表示一个字符串有一个a跟着2个b("abb");
"ab{2,}":表示一个字符串有一个a跟着至少2个b;
"ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,'*','+'和
'?'相当于"{0,}","{1,}"和"{0,1}"。
还有一个'¦',表示“或”操作:

"hi¦hello":表示一个字符串里有"hi"或者"hello";
"(b¦cd)ef":表示"bef"或"cdef";
"(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";

'.'可以替代任何字符:

"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

方括号表示某些字符允许在一个字符串中的某一特定位置出现:

"[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b");
"[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a¦b¦c¦d"或者"[abcd]");
"^[a-zA-Z]":表示一个以字母开头的字符串;
"[0-9]%":表示一个百分号前有一位的数字;
",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表
示两个百分号中不应该出现字母)。

为了逐字表达,必须在"^.$()¦*+?{\"这些字符前加上转移字符'\'。

请注意在方括号中,不需要转义字符。



正则表达式wiki:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

posted @ 2008-08-20 15:09 巴西木 阅读(172) | 评论 (0)编辑 收藏

最近的工作中越来越觉得软件设计中的界面设计多么重要,几年前就想过的原型法开发模式看来仍然有着非常实用的价值。现在人手不充裕,自己得研究以下如何在实际工作中将这种原始的方法结合进来。

基于这种想法,前几天曾经想用netbean做界面原型,理由是:1.基于java,如果以后需要application版本的程序就可以直接拿来用;2.基于java,可以跨平台使用,也是为以后着想;3.以前没用过这个,听说不错,想尝试一下(哈,私心太重)

不过近来工作确实忙得不可开交,还没来得及付诸实施就发现了一个专门做UI原型设计的工具,姑且不说这个工具到底怎么样,仅仅是这个工具的市场定位就很能赢得我的好感。哈,还没开始用就啰嗦开了,下面是搜到的一些资料,我已经开始试用了......



以下转载自:http://www.pycsky.com/interaction-design/201/

工欲善其事,必先利其器。在做一件事情前当然需要一件好的工具。这次被从软件项目调到网站项目,做软件模拟的那些装备都不好用了。本着要“专业点”的原则,准备使用Axure RP 软件进制作网站的界面模拟。无奈得知似乎只有腾讯才有中文版,其它都是英文版,于是只能找别人的教程看,发现这篇不错,于是毫不客气的转过来了。^_^.本文由:Hawking原创

先提供Axure RP pro 4.6版本的下载
http://www.jojobox.cn/blog/attachments/month_0803/AxureRP-Pro-Setup.zip
(软件仅供学习使用,反对商业用途 -_-!!!)

Part I : 介绍(Introduce)

  互联网行业产品经理的一项重要工作,就是进行产品原型设计(Prototype Design)。而产品原型设计最基础的工作,就是结合批注、大量的说明以及流程图画框架图wireframe,将自己的产品原型完整而准确的表述给UI、UE、程序工程师,市场人员,并通过沟通会议,反复修改prototype 直至最终确认,开始投入执行。

  进行产品原型设计的软件工具也有很多种,我写的这个教程所介绍的Axure RP,是taobao、dangdang等国内大型网络公司的团队在推广使用的原型设计软件。同时,此软件也在产品经理圈子中广为流传。之所以Axure RP得到了大家的认同和推广,正是因为其简便的操作和使用,符合了产品经理、交互设计师们的需求。

  在正式谈Axure RP之前,我们先来看看做产品原型设计,现在大致有哪些工具可以使用,而他们的利弊何在。

  纸笔:简单易得,上手难度为零。有力于瞬间创意的产生与记录,有力于对文档即时的讨论与修改。但是保真度不高,难以表述页面流程,更难以表述交互信息与程序需求细节。
  Word:上手难度普通。可以画wireframe,能够画页面流程,能够使用批注与文字说明。但是对交互表达不好,也不利于演示。
  PPT:上手难度普通。易于画框架图,易于做批注,也可以表达交互流程,也擅长演示。但是不利于大篇幅的文档表达。
  Visio:功能相对比较复杂。善于画流程图,框架图。不利于批注与大篇幅的文字说明。同样不利于交互的表达与演示。
  Photshop/fireworks:操作难度相对较大,易于画框架图、流程图。不利于表达交互设计,不擅长文字说明与批注。
  Dreamweave:操作难度大,需要基础的html知识。易于画框架图、流程图、表达交互设计。不擅长文字说明与批注。

  以上这些工具,都是产品经理经常会使用到的,但是从根本上来说,这些工具都不是做prototype design的专门利器,需要根据产品开发不同的目的,不同的开发阶段,选择不同的工具搭配使用,才能达到表达、沟通的目的。

  比如使用纸笔,更适合在产品创意阶段使用,可以快速记录闪电般的思路和灵感;也可以在即时讨论沟通时使用,通过图形快速表达自己的产品思路,及时的画出来,是再好不过的方法。而word则适合在用文字详细表达产品,对产品进行细节说明时使用,图片结合文字的排版,是word最擅长的工作。而ppt自然是演示时更好。visio则可以适用于各种流程图、关系图的表达,更可通过画use case 获取用户需求。PS/FW是图片处理的工具,DW则是所见即所得的网页开发软件,这些是设计师的看家本领,对于普通的产品经理来说,需要耗费太多的精力去掌握。

  其实每件工具,每个软件,在创造它的初期,软件设计师们都给它赋予了性格、气质。因为每个工具的产生,都是为了满足人类的某一方面需求。比如锄头是锄土的,起子是起螺丝的,电熨斗是烫衣服的。但是不同的工具都有自己的工作领域,在其他领域它并不擅长。而以上的软件在创造的初期,并非为了帮助产品经理、ue完成产品原型设计,因此他们都不能在prototype design 这件工作上得心应手。而Axure RP正是在互联网产品大张其道的前提下,为满足prototype design创建的需求,应运而生。

 Axure RP 能帮助网站需求设计者,快捷而简便的创建 基于目录组织的原型文档、功能说明、交互界面以及带注释的wireframe网页,并可自动生成用于演示的网页文件和word文档,以提供演示与开发。

  没错!Axure RP 的特点是:

快速创建带注释的wireframe文件,并可根据所设置的时间周期,软件自动保存文档,确保文件安全。
在不写任何一条html与javascript语句的情况下,通过创建的文档以及相关条件和注释,一键生成html prototype演示。
根据设计稿,一键生成一致而专业的word版本的原型设计文档。
  说到这里相信很多人已经激起了兴趣,但是在开始学习之前,我认为我们还是有必要先了解一下软件短短的历史,创造这一软件的公司—Axure Software Solutions, Inc.该公司创建于2002年五月,Axure RP是这一软件公司的旗舰产品,2003年一月Axure RP第一版本上线发表,至今已经正式发行到了第四个版本,而我提笔写到这里的时候,Axure 5.0版本beta版本已经正式提供下载试用,虽然我已经下载使用,但是我想,写教程还是应该先从稳定的4.6版说起,至于5.0版,我们可以伴随着软件一起成长。

  接下来我会结合图片,分几个步骤分享我对Axure的认识,
  一、 界面与功能
  二、 工具栏
  三、 站点地图
  四、 组件与使用方法
  五、 复用模板与使用
  六、 交互功能与注释
  七、 实例

  当然,在书写的过程中我会根据具体的情况再进行调整,尽量做到图文并茂,易于理解。写这个教程的目的,一方面为自己熟悉与更加理解Axure,另一方面也鞭策自己完善自己的blog网站www.2tan.net,同时也希望以自己的绵薄之力,为希望学习Axure的朋友分享一点经验。由于这是我第一次尝试写教程,难免会出现偏颇,也希望朋友们能够不吝赐教,共同进步。

  为e文好的朋友附上自学Axure RP的几个途径:
  1、 打开软件,按F1调取帮助文档,对照文档学习。
  2、 登录http://www.axure.com/au-home.aspx 查看flash视频学习。
  3、 登录 Axure 博客 http://axure.com/cs/blogs/Default.aspx,了解软件最新信息。
  4、 登录讨论组http://axure.com/cs/forums/Default.aspx,参与讨论。

 

Part II : 界面与功能(Interface & Function)

  不论学习什么,打基础是很重要的。关于基础练习,我印象最深的故事是王羲之练习书法的故事,将一池水染黑,需要怎样的毅力?再有就是达芬奇与鸡蛋的故事,一个简单的鸡蛋,达芬奇画了无数次。我相信正是他们的一步一个脚印,才让他们有了后来伟大的成就。故事老套,道理浅显,可是我认为很重要。

  学习软件,应该先熟悉每个面板,每个基础功能,才能够真正谈到运用。所以我的学习方法是了解软件的基础功能开始。

  一、欢迎界面与功能

运行Axure RP后,首先弹出的是欢迎界面,它拥有的功能和其他软件的欢迎界面没有什么特别的不同。

  功能区1:文档区,这个区域显示用户最近打开的Axure RP文件,用户可以快捷的打开之前编辑的文件。同时也提供快捷按钮,可以创建新文档与打开Axure RP默认文件夹。

  功能区2:认证区,这个区域显示注册信息。
  已经注册的用户,显示注册者名称,与已经获得认证的图标。
  未注册用户,显示注册链接,引导用户完成注册注册。

  功能区3:Axure RP学习中心。主要包括在线学习、帮助文档、问题反馈三个环节。
  a、在线学习提供了三个链接:
  video tutorial:点击后进入视频学习中心,可以通过观看相关的flash教程学习Axure RP,不过都是e文解说。
  online community:进入Axure RP的官方讨论组,在线讨论学习。
  Axure blog:进入Axure的官方论坛,了解最新资讯。
   
  b、帮助文档也提供了两个链接,但是其实起到的是一样的效果,都是打开帮助文档,只是跳往不同的章节罢了。

  c、问题反馈,通过点击链接可以发邮件到support@axure.com,以寻求获得帮助。

  在欢迎界面中,Axure还提醒用户,用4.6高版本的软件创建保存的Axure文件,无法用以前的低版本查看。

  同时,如果我们不希望下次打开软件再看到这个面板,我们可以通过选择“Don’t show this at startup”实现。

  二、软件主界面与功能

关闭欢迎界面后,我们进入软件的主界面,淡蓝色调的ui,并不是很张扬。

  功能区1:命令区,和我们操作的所有office软件一样,包含文件、编辑、查看和帮助,这些功能大抵是差不多的。table也很容易理解,就是对表格编辑的命令。而Axure特有的几个特殊的命令栏目是

    a、wireframe:线框,包含所有画原型线框图的相关命令。
    b、object:包含所有对工作区物体的操作命令,操作放入工作区的所有widgets,包括组合、排序、锁定以及脚注命令等。
    c、generate:自动生成html演示文件、word说明文档,以及对生成规则进行自行编辑、定义。

  功能区2:工具栏,基本和office风格一模一样,功能也很容易上手。

  功能区3:工作区,这就是我们平常操作工具,创建prototype的舞台,将自己的构思在这里释放,将自己的想法在这里展现。

  工作区的上部显示打开的文件名,可同时打开多文档,进行操作。

  功能区4:站点地图,Axsure RP创建的文件是模拟真实网站页面关系的,sitemap就是通过树形目录关系,管理所有的站点页面文件与流程图文件。科学的文件关系结构,对有效的演示文档与生成易读的说明文档相当重要。

  我的操作习惯是先画流程图,然后根据流程图构建页面文件框架,最后才开始页面的具体设置。期间可以将文件分为LOFI(低保真)与HIFI(高保真)两个部分进行分别展示,有利于不同的需求者使用。

  功能区5:器具箱,囤积了所有用来画wireframe与流程图的对象。我们可以通过拖拽的方式将小图形放入工作区,进行操作。对于这里面的对象,我们有必要一一详细了解。

  功能区6:复用模块区,这里创建的页面文件和sitemap的页面相似,唯一不同的是,master的每个文件,可以当作一个整体,被sitemap反复调用。这个功能就相当于程序开发中的程序复用,用好这个功能,可以减少我们很大一部的工作量。也更容易理解网页文件的关系,了解网页设计师、程序员是怎么构建网站的页面的。

  功能区7:页面笔记,用来对当前创作页面进行注释与说明。同时可以在这里对页面里的关键字段和特殊问题进行详细的描述。

  功能区8:页面载入时的交互功能。通过在这里设置,不同条件下,页面初次打开时的状况。

  功能区9:注释与交互区。这个注释和交互和7、8不同,7、8针对的是页面,而9针对的是页面中的元素,也就是一个个widgets。

  功能区的上面部分设置交互条件。通过鼠标点击、滑入、滑出,设置触发的事件,与对应widgets相应的变化。这一部分对没有程序基础的人可能会有一点难度,我稍后会做详细解释。

  功能区的下面部分是注释部分,用户可以对选定的对象进行详细的注释。Axure已经设置了几个默认的注释字段,但是其实这些默认的注释字段,大家完全可以不使用,因为它可能和你要说明的东西风马牛不相及。
   
  那么该怎么办呢?Axure提供了自主设置字段,只要你自己设置好自己常用的字段,然后按照自己的习惯编写就可以了。比如说你要说明对象的功能、优先级、参数,那么你在设置中加入这三个字段就好了。Axure最大的优势就是你设置的这些注释,在生成说明文档时,Axure自动帮你生成PRD规格的表格文档,你可以省去相当大的编号工作,与文档工作。这些我在之后也会做说明。

  这些就是Axure的主要功能区,但是其实还有两个小的角落大家可能会忽略,那就是6、7、8区下面的一行系统信息,这里显示的信息很重要,但是一般人却经常会忽视。我只所以说重要,因为我们在给ui设计师wireframe的时候他们总会问,这里多少像素,那里多少像素,可是我们在画wireframe的时候却无法度量。Axure创建的wireframe,完全可以生成html,因此我们可以在画的时候就度量好每个像素距离。但是我们要怎么做呢?这就需要利用到下面这行小信息栏了。

  信息栏左边显示的是文档保存情况。而右边呢,当你将一个widgets放入工作区,并选择这个widget时,这里就有用了,它显示的是你所选择widget的高宽,以及距离页面顶部和左边的px距离。通过使用上下左右键,结合这个信息栏,你可以一步一步将它移动到你想去的地方。有意思吧?

Part III : 文档管理(Document)

 开章要说的是文档管理。文档管理看似简单,但是这是从操作功能上来说的,而我在说功能上的时候,想把我对文档管理的理解也一并说一下。

  文档管理的目的,其实是为了有一个清晰的产品思路。刚开始工作的时候,我发现很多刚从学校出来的朋友对文档的命名与放置都是随心所欲的,我也不例外。没有好的整理习惯,这直接导致每次寻找先前的文档都要花费相当长的时间,甚至不小心误删,如果恰好有事请假,别的同事也无法接手工作。

  所以,做一个prototype需要首先构建一个清晰的文档关系,这样一方面能够让自己清楚文件关系与位置,更主要的是让开发者与接受者能清晰理解你的思路,生成更合理的产品说明word文档。

  Axure RP的sitemap,与windows的树形目录相似,是以父子关系构建页面关系的,每个页面既可以是一个页面page,也可以是一个流程图flow。

一、工具功能条

 1、增加一个子页面:为所选择的页面创建一个子页面。
  2、页面上移:同等级的页面中,将所选页面的上下排列次序,上移一个位置。
  3、页面下移:同等级的页面中,将所选页面的上下排列次序,下移一个位置。
  4、页面降序:将所选页面等级降序,作为原等级中,排列在所选页面上方之页面的子页面。
  5、页面升序:将所选页面等级升序,将所选页面的页面等级,升序为父页面的同等级页面。
  6、删除页面:将所选页面删除,同时删除其子页面。
  7、编辑页面:在工作区打开所选择页面,进行编辑。

二、右键—增加为鼠标右击文件所显示命令,下同。

  1、增加一个子页面:同 一,1。(表示和第一大点,第1小点功能相同,以下同此)
  2、在所选页面之上增加一个同等级页面。
  3、在所选页面之下增加一个同等级页面。

三、右键—移动

    1、页面上移:同一,2。
  2、页面下移:同一,3。
  3、页面降序:同一,4。
   4、页面升序:同一,5。

四、右键—复制

    1、复制页面:复制所选页面,作为同级页面显示在所选页面下方。不包含所选页面子页面。
  2、复制分支:复制所选页面以及子页面,作为同级分支显示在所选页面分支下方。

五、右键—页面类型

  1、wireframe:页面类型定为线框图,文件图标显示页面图标。
  2、flow:页面类型定位流程图,文件图标显示流程图标。

六、右键—其他

1、删除页面:同一、6。
  2、重命名页面:为所选页面重命名。
  3、编辑页面:同一、7。
  4、生成流程表:将所选页面以及其子页面关系,生成流程图。生产图有两种页面布局方式可选。标准模式,页面按照父子关系从上自下排列;阶梯模式,页面按照父子关系从左上至右下,以阶梯方式进行排列。
  5、复制页面链接到剪切板。

  以上就是sitemap所有命令,其实这些命令都很简单,也很容易理解,关键在于怎么去使用。

  由于页面有两种类型,wireframe与flow,所以要善于用这两种标记页面,从而让人理解你的意图。我总结大致这两种标记可以如下利用。

  flow图为父页面,wireframe图为子页面:先画流程图,然后根据流程图构建页面关系。这样在流程图的指引下结构页面关系,可以更清晰的理解页面框架。

  wireframe为父页面,flow为子页面:为页面线框图中的特殊部分做流程解释。可以对页面的细节部分进行详尽的解释。

  当然,这两种结构方式要活学活用,在复杂的产品页面结构中,他们完全是你中有我,我中有你的。

Part IV : 模板复用(Templates)

 

  masters和sitemap面板很相似,文档操作也一样,它们的本质区别是,sitemap里的文件是最终展示页面,masters里的文件却只是一个模块,是页面的一个部分。

  masters的英文直译是主人或雇主,但是我认为这里可以叫做模板,或者复用模块。masters的文件,是页面中重复的模块,由于在不同页面中这些模块是一样的,所以拿出来作为一个模块编辑,然后在不同页面中进行调用。

  这个功能类似于网页程序开发中的程序复用,不同页面中调用同一段程序,一般把这段程序单独做成一段页面程序,然后用include命令进行调用。master的文件就相当于这段被调用的页面程序。dreamweaver也有类似的功能,就是template,可以参照理解。

一、功能条
  master的功能条功能基本和sitemap一模一样,功能也基本一样。唯一不同的是master可以创建文件夹,可以通过文件夹收纳不同的文件,因此唯一不同的就是第一个功能按钮,功能作用是增加一个文件夹。

二、右键单击文档——增加

  增加功能的功能模块功能除了增加文件夹其他和sitemap相同,大家可以参考教程三中的二大条。

  而masters的文档组织结构主要依靠文件夹完成,页面文件之间不存在父子关系。这是文档操作与组织中与sitemap的最大不同。

三、右键单击文档——移动

  文件移动功能基本上也和sitemap完全相同,但是父子关系的文档移动是文件相对于文件夹完成,而不是相对于文件进行。

  功能,基本上也可以参考教程三的第三点。

四、右键单击文件——文件身份“行为”

   behavior是行为的意思,这个功能是axure升级到4版本后加入的,是针对master的不同使用情况而添加的一个功能,也是要重点介绍的功能。

  1、normal:普通文件。就是一般的复用文件。是默认创建的复用文件。

  2、place in background:定位的复用模板,这类模板的特点是定位于页面的底层,并且锁定模板中的widgets在他原来创建的位置。这类复用模块主要用于创建head、foot、侧边栏等明确定位的复用模块。

  3、custom widgets behavior:自定义模块。这类模块就类似于自创了一个widgets。

  这类模块与其他类型的复用模块的不同在于,其他模块与复用到页面的模块是完全相同的,模块的功能设置是什么,功能说明是什么,页面中的模块设置和功能说明就是什么。

  而自定义模块与页面中被复用的模块是母子关系。自定义模块只决定了模块的功能和位置,但是进入到特定的页面中,模块中的各自部分的说明和功能可以重新定义。

  充分理解三种不同类型的复用模块的区别,根据不同环境有效的选择,也是非常重要的。

五、右键单击文件——其他

   1、2、3功能都是文档文档操作功能,和sitemap一样,分别是删除、重命名和编辑master。

  4、5功能是对应的。前者是将所选模板文件批量运用于页面,后者是将所选模板文件,批量从页面中去除。通过选择此功能,会弹出sitemap文件的树形目录,你可以通过选择需要添加模板的页面,从而完成模板使用或移除。
  check all:选择所有页面
  uncheck all:所有页面都不选择
  check all children:选择所选页面以及其所有子页面
  uncheck all children:不选择所选页面以及其所有字页面

  在4中有特殊的position设置和options命令,

  position中有两个命令
  place in blackground:将文件至于页面背景
  specify location:是特殊定位,可以通过设置距离左侧和上边的距离,来将模板文件放入特定的位置。 
  options里的多选框的意思是“只有页面中没有此模板时才置入”,默认是选择的。如果不选择而置入页面,就会出现如果页面中已经有模板,模板被再次置入的情况。当然如果有特殊需要的模块,就可以这么使用了。
  6、usage report:使用报告,点击后弹出面板,显示所有使用了此复用模板的列表,显示的是文件名称,通过双击文件名,可以在工作区打开,直接编辑。

PartV:Widget工具

  Axure RP的widgets工具栏,就是我们用来画线框图wireframe、流程图flow的工具,也可以说是组成我们最终输出图表的零件。好比我们小时候玩的组装积木,这些工具就是组装积木里的一个个小部件,组成什么?组合得怎样?完全依靠个人的经验和智慧。因此,熟悉每一个工具的用法和用途,才能随心所欲的画出脑海中的图形。

  Widgets工具栏,下分两类工具:
  wireframe线框图工具:基本上对应着web页面中的各种图形。针对页面中交互行为的表达,Axure RP专门增加了image map region 图像映射区、dynamic panel动态面版、menu(vertical/horizontal)水平/垂直菜单等几个特殊的工具。

  Flow工具:流程图所需的基本图形框架。

  我们先谈wireframe线框图工具。学习这部分工具,如果事先有html基础,或者对web页面元素有比较充分的理解,就很容易入手。以下我根据图片中的编码,依次讲解。

  1、image图片:给wireframe中插入一个图片站位,也可以直接置入真实的图片。

  2、text panel文本:插入文本。相当于插入了一个< text >标签。是不带链接的文本。但是其实也可以带链接,在interactions中我们会提到。

  3、hyperlink超链接:插入带链接的文本。相当于插入了一段带< a >标签的文字。但其实在Axure中它与普通文本除了外型不同,没有本质区别。
之所以将两类文字区分开来,目的还是为了在视觉表达中让人直观的理解链接文本和普通文本,而这对于设计人员理解也非常重要,因此建议画图时尽量标准的区分链接文本和普通文本。

  4、rectangle矩形:插入一个矩形。可以对其进行图形样式编辑。此图形通畅被用来表达板块的边界。

  5、placeholder占位符:插入一个占位符。占位符通常用来表达在页面中某些特殊区域,比如情况复杂,或者在系统升级中不需要修改,又或者无关紧要的区域等等。作者需要结合说明文字,进行对应的详细表达。
  6、button按钮:插入一个按钮,相当于< button >标签。按钮一般结合表单使用,当然也可以作为强化的提示链接使用。

  7、teble表格:插入一个表格。Axure的表格使用起来不是很方便,增加行、列,修改行、列宽度都不方便,算是一个败笔。期待在下一个版本的时候能够有更好的进步。与标准化制作网页一样,表格的使用在画wireframe的时候就应该明确其作用,是用来作为数据列表展示使用,而不是作为网页布局的控件。

  8、text field文本输入框:结合表单使用。一般用作表单中提交数据。比如搜索框、用户登录框、注册信息填写框等。用作字段提交或单行数据提交。

  9、text area文本区:结合表单使用。一般用作大段文字编辑、提交。比如文章编辑、留言等板块。

  10、droplist下拉列表框:结合表单使用。一般用作下拉菜单或者下拉列表选项,比如在搜索中,可以通过下拉列表框来定位搜索分类的范围。也有人用它来做友情链接,可以通过下拉选择直接进行页面跳转。

  11、listbox列表选择框:结合表单使用。通过文本框列表选项,通常使用在多项列表选择,比如在填写简历表的时候,选择你所感兴趣的行业,会提供列表选择框。不过列表选择框都会结合按钮使用。

  12、checkbox多项选择:多项选择通常使用在表单中,以提供多项选择。比如在有些有些注册要求用户选择兴趣爱好,会提供十多个选项,因为选项可以并列进行,因此使用的是多项选择。

  13、raido button单项选择:在一组选择中选择适合选项,选项关系非此即彼。比如在填写性别的时候提供男女选择,用户非男即女,只取一项。当然,不排除再多提供一个双性选择,这样就是三选一,但是同样是非此即彼的单一选择。

  14、15、horizontal line水平线、vertical line垂直线:用以分割页面中的不同板块区域。由于web页面中只能存在垂直与水平线,为了系统生成用于演示的html文件,特将两种线条分开使用。

  16、button shape形状按钮:相当于图形按钮,多用于导航,或者多帧切换的版面切换按钮。可进行边角编辑。

  17、image map region图像映射区:它用于在web页面中制造一片不可见的区域,一般是图片的部分区域,相当于图片的热区,从而添加说明与互动。在现实的网页中经常会有一张大图中有某个区域是触发按钮,而图像映射区就可以用来说明这个区域的的功能和互动内容。

  18、inline frame框架:类似于html中的< iframe >对象。用于在页面中制造页面框架,每个框架中嵌入不同的页面。我们经常看到后台系统分左右两栏,一般都是使用了框架,左侧载入的是导航页面,右侧是载入的管理页面。
Axure的缺点是,暂时不支持百分比,因此iframe都是按像素度量的,和实际页面效果还是有差距。

  19、dynamic panel动态面版:是Axure为了表现多帧区域内容而制造的一个工具。它的图标很形象的说明了它的结构。它是不同的state叠加的一个动态区域,默认显示其中一个state,当用户触发按钮、图片或者下拉列表等时,可以设置相应动态面版切换到不同的state。不同state的关系,类似于photoshop的层,也类似于html中的css属性layer。
我们可以通过右击dynamic panel进行state编辑,然后通过打开对应state进行编辑,编辑方式和编辑页面相同。

  20、21、menu(vertical/horizontal)水平/垂直菜单:用于制作水平或者垂直的菜单,可以添加漂浮的的子菜单,添加方法很简单,就是选择所要添加的菜单项,添加submenu。

   Axure RP pro 的widgets工具栏,另一个重要的工具组就是flow,流程工具。

  对于画流程图,是我们经常会遇到的问题。我们和程序工程师沟通,用再多的口水,也无法挑明的事情,画一张简明的流程图,就能很直白的说明关键问题。

  有时候你可能会懊恼,因为程序员的思维犹如计算机,你告诉他为什么没有用,你就告诉他该怎么做,是左是右,是0是1就好了。这个时候,产品经理需要的是理性思维,清晰的思路,如果你不清晰,工程师大多数会跟着你的思路乱做一团。所以多画几个流程,多根据页面需求画清晰的流程,就能解决实际的问题。

  话不多说,本章主要介绍flow里面的工具,因为图形其实很好介绍,简单的英文翻译就好了,所以也顺带说说这些图形在流程里的作用。方式还和以前一样,编号,对号入座,咱们来一个萝卜,一个坑:

  1、rectangle:矩形
  作用:一般用作要执行的处理(process),在程序流程图中做执行框。
  在axure中如果是画页面框架图,那么也可以指代一个页面。有时候我会把页面和执行命令放在同一个流程中做说明,这个时候将两类不同的矩形做色彩区别,然后做说明就好了。

  2、rounded rectangle:圆角矩形或者扁圆
  作用:表示程序的开始或者结束,在程序流程图中用作为起始框或者结束框。

  3、beveled rectangle:斜角矩形
     作用:斜角矩形我几乎不使用,可以视情况自行定义。或者在其他的流程图中,有特殊含义,暂不知晓,也希望有识之士指点一二。

  4、diamond:菱形
     作用:表示决策或判断(例如:If…Then…Else),在程序流程图中,用作判别框。

  5、file:文件
     作用:表达为一个文件,可以是生成的文件,或者是调用的文件。如何定义,需要自己根据实际情况做解释。

  6、bracket:括弧
     作用:注释或者说明,也可以做条件叙述。一般流程到一个位置,做一段执行说明,或者特殊行为时,我会用到它。

  7、semicircle:半圆形
     作用:半圆在使用中常作为流程页面跳转、流程跳转的标记。

  8、triangle:三角形
     作用:控制传递,一般和线条结合使用,画数据传递。

  9、trapezoid:梯形
     作用:一般用作手动操作。

  10、ellipse:椭圆形或圆形
     作用:如果画小圆,一般是用来表示按顺序数据的流程。
     如果是画椭圆形,很多人用作流程的结束。如果是在use case用例图中,椭圆就是一个用例了。

  11、hexagon:六边形
     作用:表示准备之意,大多数人用作流程的起始,类似起始框。

  12、parallelogram:平行四边形
     作用:一般表示数据,或确定的数据处理。或者表示资料输入(Input)。

  13、actor:角色
     作用:来自于use case 用例,模拟流程中执行操作的角色是谁。需要注意的时,角色并非一定是人,有时候是机器自动执行,有时候也可是是模拟一个系统管理。

  14、database:数据
     作用:就是指保存我们网站数据的数据库。

  15、image:图片
     作用:表示一张图片,或者置入一个已经画好的图片、流程或者一个环境。

  基本上,axure讲基本流程图、页面框架图、use case 用例图涉及到的一些关键图形都囊括在flow流程工具中,模糊了流程图的区别,而尽量贴近交互设计时的工作内容。

  流程图无疑只是一个表达的工具,我们在使用的时候应该根据自己的实际情况使用,而不应该死钻牛角尖,非要知道某个图形的通用标准。理解和沟通是第一位的。而对于某些具有标准性含义的图形,大家人所共知,则我们应该遵循共同的准则,这样就能达到表达的目的。

  其实axure里面由于不涉及到具体的程序流程,所以有些标准的图形并没有提供,如不规则图形、侧面双矩形等,大家可以自己google一下或者baidu一下很容易就知道。大多数情况下,还是自己自定义一下自己的符号标准,就跟prd文档加上名词解释一样,才是解决方法。

 PartVI:注释annotations

  Axure rp将interaction交互与annotations注释说明功能放在了一个面版上,同时又针对整个页面有一个交互与注释说明。

  交互功能设置的是用户通过不同方式触发页面中元素或者载入页面时,发生的交互动作。而注释说明则用文字详细说明对应元素的细节或页面的说明。由于针对整个页面的说明和交互,与针对页面中某个元素的说明与交互在文档表现和生成的不同,而被分开,但是他们的实际功能是一致的,可以一起来说。

  针对页面和针对页面元素的功能,分别默认处于软件界面的右侧和底侧。如下面两张图片所示:


底部

 
右侧

  对于交互与注释说明,有必要分开讲述。这一节主要讲述annotations,即注释说明。

  首先,我定义一下对交互与注释说明的解释。
  Interaction:交互功能,用以设置页面中的交互事件,如页面跳转、面版跳转。从而实现框架图中不同对象的实际功能。在生成html框架页面时,产生相应的对象功能,用以演示操作。

  Annotations:注释说明,用以对页面或页面中的特定对象进行说明注释。可以根据实际情况分类编写说明内容。比如优先级、功能类型、交互效果、说明等。让程序在开发的时清楚了解该对象或该页面的程序实现详情与细节。

  那么,现在重点来说注释。
  1、自定义注释与说明
  你也许看到e文会头大,你也许第一次看到annotations面版中specification、status、benefit、effect等一连串的英文单词脑袋发晕,那么我告诉你,你完全不用在意这些单词和选项的意义,因为也许它们根本就不适合你,而你可以自定义一套自己的说明选项。

  我之所以说你不必去理解,出于两个理由,一是因为这些定义,是axure根据一些欧美公司文档中常见的字段归纳出来的,他不适合我们的国情和我们自己公司的实际情况,二则是一个文档中该向你的程序员、设计师表达什么,并没有一个完全的框架。你尽可以根据你要说明的事情,以及你们往常的沟通方式来定义。那么现在看看,我们怎么来定义吧。

  如果是定义右侧的对象注释,选择 annotations & interactions > customize fields and viwe
  如果是定义底部的页面注释,选择 page notes – default > manage notes
  就弹出了自定义窗口,由于功能类似,所以我只选择复杂的右侧的对象注释来说明

  如图所示,我们看到了两个区域:
  区域一:Fields:这是管理系统所有的说明字段的,这里定义了针对对象你要说明它的哪些属性,这些属性,用什么类型type的文字进行表述。

  A)新增字段

  

先在前面的下拉选择框中定义该字段的type类型,有四种类型:
  Text:文本文字。说明字段中用大段的文字进行说明。
  Number:数字。说明字段中只包含数字说明。
  Date:日期。说明字段只有日期
  Selectlist:选择列表。通过设置特定的选择条件,以供选择。

  然后在后面的填空框中输入字段的名称,比如我想设置一个对页面中对象的开发优先级的说明字段,那么我就可以给这个字段命名为“优先级”。然后点击add按钮,你所设置的说明字段就被添加到下面的字段列表了。

  B)管理字段
  管理字段,首选必须选中你要管理的字段。

  然后可以通过选择右侧的功能按钮,对字段进行管理:
  [b]Remove:[/b]删除此字段。
  Rename:对字段重命名。
  Move up:将字段排列顺序上移一格。
  Move down:将字段排列顺序下移一格。
  Edit selectlist:编辑选择列表中的项目,该功能只有当你所选择的说明字段的type类型是selectlist时,你才能选择。选择后会弹出编辑窗口,你可以根据自己的需求,填写不同的选择项,Axure定义,每一行为一个选择项。

  点ok之后,你就完成了对所选项的管理。

  区域二Custom views:这里是定义了我们自定义文件的版本。我们可以选择几个常用的说明字段,归纳起来生成一个自定义版本。
  A)新增用户自定义说明

     新增说明很简单,只要在输入框中输入一个名称,点选add,就会弹出一个选择框

  你可以通过add field下拉列表选择你的自定义说明中要包含的说明字段项目,然后点add添加到你的自定义说明中。
  当你都选择完成后,点done,就创建了一个你自己的自定义说明。

  B)管理自定义说明
  管理自定说明,和管理说明字段一样,在管理前,你必须选中你要管理的自定义说明。
  Rename:对字段重命名。
  Edit:重新定义此自定义说明中所包含的fields说明字段。弹出选择框,供你重新选择。
  Remove:删除此自定义说明。

  最后,当你即完成了对字段的处理,又完成了自定义说明的生成后,点done,你就定义完成了你自己的注释与说明。这个时候,你再选择annotations & interactions,你将会看到你自己的自定义说明:

  选择后,右侧的注释与说明的字段就都是你自己的了:

   2、自定义注释与说明的现实意义
  那么这些自定义说明到底对于我们有什么现实的意义呢?有的,下面我来说明一下。
  这涉及到axure rp的两个文档生成功能

  生成演示文档:我们利用axure完成文档的编写后,需要给程序演示,那么我们怎么演示呢?
  请按下f5键,会弹出提示框,按照默认设置确定后,就会生成html演示文件。你就可以拿这些html文件,给程序员、设计师们演示你的文件了。
  而我们自定义的这些说明,在编写好的时候会出现在如图中的位置:

    就是说明面版的激活按钮,点击弹出你的说明文字。这样,用户就可以在不明白的时候在页面中调出说明文字,一一查看了。

  生成word文档:我们也可以生成word的文档的说明文件,这样的文件甚至可以当作PRD文档使用,而说明则会根据label的标签以及编号,对应生成table说明文档。
生成word的快捷键是F6,生成specification说明书。

   综上所述,运用好了annotations,就可以解决好prd文档中最重要的工作,即功能说明。至于设置怎样的注释,完全就靠你自己来掌控了。

  Ps:页面notes更加简单,因为针对页面的说明只能有一段文本,不存在特殊说明字段的编辑。

posted @ 2008-08-19 15:46 巴西木 阅读(450) | 评论 (0)编辑 收藏

XFire 概述

XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。

XFire 目前最新的版本是 1.2.2,目前支持的特性主要包括:

  • 支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
  • 支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务;
  • 支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;
  • 支持 JSR181,可以通过 JDK5 配置 Web 服务;
  • 高性能的 SOAP 实现;
  • 服务器端、客户端代码辅助生成;
  • 对 Spring、Pico、Plexus 等项目的支持等。




回页首


XFire 安装包

XFire 框架目前的最新版本是 1.2.6,可以访问 xfire.codehaus.org 下载 XFire 框架的安装包,下载时请选择“全部二进制发布包(Binary Distribution in zip package)”,而不仅仅是“XFire jar 文件(Jar of all XFire modules)”。

下载完成后,我们可以将下载的 .zip 文件解压缩到任意的文件夹中(后面的章节中使用 % XFIRE_HOME % 表示 XFire 框架的安装目录),解压缩后形成的文件目录结构如下:

  • api(目录)

    api 目录中是 XFire 框架中所有类(class)对应的 API 文档,为开发者使用 XFire 完成应用开发提供帮助。

  • examples(目录)

    examples 目录中包含了所有随 XFire 二进制包发布的实例,包括这些实例的源代码和相关 Web 应用配置内容。

  • lib(目录)

    lib 目录中包含 XFire 运行所需要的外部支持类包(.jar文件),可以根据不同项目所需的 XFire 特性选择所需要的支持类包。保守的方法是在 Web 项目中包含所有的外部支持类包(.jar文件)。

  • manual(目录)

    manual 目录中包含有 XFire 框架的帮助文档,开发者可以从这些帮助文档中学习更多运用 XFire 框架实现 SOA 的知识和技巧。

  • modules(目录)

    modules 目录中包含了 XFire 框架根据不同特性分别编译的二进制包文件。发布基于 XFire 框架的 Web 项目时,可以选择使用该目录下的所有 .jar 文件,也可以选择 XFire-all-1.2.6.jar 文件。

  • XFire-all-1.2.6.jar

    XFire 框架的二进制包文件,包含了全部的模块(modules)。

  • LICENSE.txt

    LICENSE.txt 文件中包含了 XFire 框架的授权协议。

  • NOTICE.txt
  • README.txt

    这两个文件中包含了 XFire 发布时的一些有用的信息。





回页首


XFire 框架支撑环境

XFire框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于XFire应用框架开发的企业应用,除了XFire框架本身之外,还需要JDK和Servlet容器的支持。

1.JDK 版本选择、下载和安装

XFire 支持非常多的特性,其中不同的特性对 JDK 版本的要求有所不同,比如如果项目中选择基于 JSR181 标准发布 Web 服务,我们就需要选择 JDK5 或者以上版本,如果仅仅选择将 Web 服务绑定到最简单的 POJO,我们只需要选择 JDK1.4 版本即可。

JDK 各版本均可以在 java.sun.com 网站上下载,如何安装 JDK 请参考 SUN 公司的相关技术文档和 JDK 的帮助文档。

2.Servlet 容器下载和安装

XFire 是一种基于 Servlet 技术的 SOA 应用开发框架,需要 Servlet 容器的支持。XFire 支持在多种 Servlet 容器中运行,包括 Websphere、Weblogic、TOMCAT 等。为了说明的简单,我们选择使用 TOMCAT(版本5.0.30)作为 XFire 的运行容器,所有配置过程和发布步骤的说明也均是针对 TOMCAT,如果读者使用 TOMCAT 之外的其它 Servlet 容器或者选择了 TOMCAT 的其它版本,下面的配置过程和步骤可能需要做出调整,请读者根据实际 Servlet 容器的帮助文档进行相应调整。

TOMCAT 各版本均可以在 tomcat.apache.org 网站上下载,如何正确安装 TOMCAT 服务器请参考 TOMCAT 服务器的帮助文档。

3.xalan

XFire 需要 xalan 项目的支持,然而 1.2.6 版本中并没有带有相应的 jar 文件,因此请访问 xml.apache.org,下载 xalan 项目的二进制包。





回页首


XFire 应用配置

前面的章节中我们下载和安装了 XFire 安装包和所需要的支持环境,现在我们开始学习如何从零开始创建 XFire 应用开发环境。下面的所有配置过程和发布步骤均针对 TOMCAT(版本5.0.30)服务器,如果选择其它的 Servlet 容器,下面的配置过程和步骤可能需要做出调整,请读者根据实际 Servlet 容器的帮助文档进行相应调整。

1、创建 Web 应用目录和基本元素

  1. 在 %TOMCAT_HOME%/webapps 目录下创建新的 Web 应用目录 “XFire”

    [注] 其中的 %TOMCAT_HOME% 指向 TOMCAT 的安装目录。

  2. 在 ”XFire”目录下创建 ”WEB-INF”目录、
  3. 在 ” WEB-INF”目录下创建 ”lib”目录和 ”classes”目录
  4. 在 ” WEB-INF”目录下创建 Web 应用描述文件 ”web.xml”, ”web.xml”文件的内容见 清单 1-1

清单 1-1 WEB-INF\web.xml
            1、	<?xml version="1.0" encoding="ISO-8859-1"?>
            2、	<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
            3、	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            4、	    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
            5、	    version="2.4">
            6、
            7、	    <display-name>XFire实例</display-name>
            8、	    <description>
            9、	         基于XFire框架发布Web服务的例子
            10、	    </description>
            11、
            12、	</web-app>
            

2、拷贝 XFire 所需的支持类包文件

拷贝 %XFIRE_HOME%/lib 目录下所有文件到 “1、创建 Web 应用目录和基本元素” 中所创建的 ”lib”目录下,将 %XFIRE_HOME%/XFire-all-1.2.6.jar 文件也拷贝到 “1、创建 Web 应用目录和基本元素” 中所创建的 ”lib”目录下。将 xalan 安装包中的所有 jar 文件和所需要的支持 jar 文件拷贝到相同的 ”lib”目录下。

[注] 为了减少拷贝的 jar 文件的数目,开发者可以根据项目的需要选择需要拷贝的 jar 文件,而不是全部拷贝,如何根据需要选择拷贝合适的类包文件请访问 XFire 站点

3、配置 XFire 框架运行所需的 Servlet

修改 web.xml 文件,在其中增加如下 Servlet 定义内容。

1、	<servlet>
            2、	    <servlet-name>XFireServlet</servlet-name>
            3、	    <display-name>XFire Servlet</display-name>
            4、	    <servlet-class>
            5、	        org.codehaus.xfire.transport.http.XFireConfigurableServlet
            6、	    </servlet-class>
            7、	  </servlet>
            8、
            9、	  <servlet-mapping>
            10、	    <servlet-name>XFireServlet</servlet-name>
            11、	    <url-pattern>/servlet/XFireServlet/*</url-pattern>
            12、	  </servlet-mapping>
            13、
            14、	  <servlet-mapping>
            15、	    <servlet-name>XFireServlet</servlet-name>
            16、	    <url-pattern>/services/*</url-pattern>
            17、	</servlet-mapping>
            

4、创建 XFire 框架的服务发布文件 services.xml

  1. “1、创建 Web 应用目录和基本元素” 中创建的 classes 目录下新建目录 ”META-INF\xfire”;
  2. 在步骤 a) 中新建的 ”xfire”文件目录下创建新文件 services.xml,文件的默认内容如 清单1-2

清单 1-2 WEB-INF\classes\META-INF\xfire\services.xml
            1、	<beans xmlns="http://XFire.codehaus.org/config/1.0">
            2、	</beans>
            



一个简单的xfire配置方法,后面的jar包列表很有用,是必备的jar包列表

xfire 配置指南(服务端)

xfire 配置指南(服务端) :
在xfire框架下写webservice非常简单,他解藕得像webwork。
在xfire框架下任何一个类都可以做webservice,只需配置一下就可以在服务端运行了。
就让我们从WorldHello开始吧

package hank.lee;

/**
*
* @author Hank Lee
* @version 100000.000001 Beta
* @since JDK 1.5
*/
public class WorldHello {
public String getEcho(){
return “I love you, hank.lee!!”;
}
}

由于时间关系,我已经写好了代码,然后就是配置了。
1.WEB-INF\classes下META-INF\xfire\services.xml,配置如下:
<beans xmlns=”http://xfire.codehaus.org/config/1.0″>
<service>
<name>HankService</name>
<namespace>http://xfire.codehaus.org/HankService</namespace>
<serviceClass>hank.lee.WorldHello</serviceClass>
</service>
</beans>
2.WEB-INF\web.xml,配置如下:
<web-app>
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>

就这样部署,请移玉指点击浏览器试试 http://yourhost:8080/yourapp/services/HankService?wsdl
你不是发梦,是的,可以运行了。
简单了吧,不过上帝是公平的,要运行以上的例子需要的包是非常多的。

activation-1.0.2.jar
commons-attributes-api-2.1.jar
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging-1.0.4.jar
httpunit-1.6.1.jar
jaxen-1.1-beta-8.jar
jdom-1.0.jar
js-1.5R4.1.jar
jtidy-4aug2000r7-dev.jar
log4j-1.2.6.jar
mail-1.3.3_01.jar
nekohtml-0.9.1.jar
org.mortbay.jetty-5.1.3.jar
qdox-1.5.jar
servlet-api-2.3.jar
spring-1.2.6.jar
stax-api-1.0.jar
stax-utils-snapshot-20040917.jar
wsdl4j-1.5.2.jar
wstx-asl-2.9.jar
xbean-2.1.0.jar
xbean-spring-2.2.jar
xercesImpl-2.6.2.jar
xfire-aegis-1.0.jar
xfire-annotations-1.0.jar
xfire-core-1.0.jar
xfire-spring-1.0.jar
xfire-xmlbeans-1.0.jar
xmlParserAPIs-2.6.2.jar
XmlSchema-1.0.jar


这篇文章很清晰地讲述了xfire的入门过程

◎XFire 使用记

XFire开发Web服务的基本步骤
1) 检验JAVA类的方法和构造函数是否是公共的,一定要是公开的。
2) 将XFire Servlet相关的入口添加到web.xml中。

<servlet>
    
<servlet-name>XFireServlet</servlet-name>
    
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    
<load-on-startup>0</load-on-startup>
  
</servlet>
  
<servlet-mapping>
    
<servlet-name>XFireServlet</servlet-name>
    
<url-pattern>/services/*</url-pattern>
  
</servlet-mapping>

3) 创建services.xml并把它放到WEB-INF/classes/META-INF/xfire目录下,这是默认的做法;也可以将services.xml的路径配置到web.xml文件中。

<servlet>
    
<servlet-name>XFire</servlet-name>
    
<display-name>XFire Servlet</display-name>
    
<servlet-class>
        org.codehaus.xfire.transport.http.XFireConfigurableServlet
    
</servlet-class>

    
<!--
      The servlet will by default look for the configuration on
      the classpath in "META-INF/xfire/services.xml". You can
      override it with this parameter. Seperate multiple configuration files with a comma.
     
-->
   
<!-- 默认会在classpath的META-INF/xfire/下查找services.xml文件,
     可以覆盖这个参数,指定多个配置文件
-->
    
<init-param>
      
<param-name>config</param-name>
      
<param-value>services.xml</param-value>
    
</init-param>
  
</servlet>

4) 将XFire和其它第三方库添加到Web应用的WEB-INF/lib目录下。


FAQ
1) Weblogic8.1中应用XFire,启动wls时,出现java.lang.NoSuchMethodError的解决办法。
   首先,将XFire提供的QName JAR(qname.jar)放进WEB-INF/lib目录下。然后,将weblogic.xml文件放到WEB-INF下。
weblogic.xml的内容为:

<!DOCTYPE weblogic-web-app PUBLIC
  "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
  "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"
>

<weblogic-web-app>
  
<container-descriptor>
    
<prefer-web-inf-classes>true</prefer-web-inf-classes>
  
</container-descriptor>
</weblogic-web-app>

具体的详细解说,请看XFire的User's Guide.


技巧
1. 如果Web Services的方法的参数是Collections,那就需要建一个Mapping文件,而且Mapping文件的命名为className.aegis.xml,并且与class放在同一个package下。
如:
public interface IConstraceSerice {
   boolean editConstraceInfo(List aList);
}
Mapping文件如下:IConstraceService.aegis.xml
<?xml version="1.0" encoding="utf-8"?>
<mappings>
   <mapping>
      <method name="editConstraceInfo">
          <parameter index="0" componentType="java.lang.String"/>
      </method>
   </mapping>
</mappings>

<parameter index="0" componentType="java.lang.String"/>表示第一个参数,里面实际值的类型,这里实际值的类型是java.lang.String.
如果是一个JavaBean,如com.test.TestBean,那以就要写成<parameter index="0" compentType="com.test.TestBean"/>

2. 如果返回类型是List或Map,并且里面存放的是自定义类的话,则需要增加一个对于服务接口的配置文件。该文件的命名规则是 接口文件名.aegis.xml。例如接口是UserService.java的话,则此配置文件命名为UserService.aegis.xml。注意此配置文件须与接口放在同一目录下面。
<?xml version="1.0" encoding="UTF-8"?> 
 <mappings> 
   <mapping > 
     <method name="getUsers"> 
       <return-type componentType="com.test.domain.User"/> 
     </method> 
   </mapping> 
 </mappings>
getUsers方法返回类型是List,里面装的User对象。对于这种类型的方法,在配置文件中描述了它的返回值类型。

如果返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分,并且这样的话,Map中Value所存放的对象就必须全部是同一种类啦。

下面给出一个详细的例子:
1)服务接口:
public interface MyService2
{
    boolean getInfo();
    Collection getCollection(); //method 1
    Collection getCollection(int id); //method 2
    Collection getCollection(String id); //method 3
    Collection getCollectionForValues(String id, Collection c); //method 4
    Collection getCollectionForValues(int value, Collection c); //method 5
}
2) Mapping文件内容:
<mappings>
    <mapping>
        <!-- mapping 1 -->
        <method name="getCollection">
            <return-type componentType="java.lang.Double"/>
        </method>
        <!-- mapping 2 -->
        <method name="getCollection">
            <return-type componentType="java.lang.Float"/>
            <parameter index="0" class="int"/>
        </method>
        <!-- mapping 3 -->
        <method name="getCollectionForValues">
            <return-type componentType="java.math.BigDecimal"/>
        </method>
        <!-- mapping 4 -->
        <method name="getCollectionForValues">
            <parameter index="0" class="java.lang.String"/>
            <parameter index="1" componentType="java.util.Date"/>
        </method>
        <!-- mapping 5 -->
        <method name="getCollectionForValues">
            <return-type componentType="java.util.Calendar"/>
            <parameter index="0" class="int"/>
            <parameter index="1" componentType="java.lang.Bit"/>
        </method>
    </mapping>
</mappings>


3. 如果一个方法的返回类型是一个JavaBean,而这个JavaBean当中又存在Collections,那么就需要定义一个与JavaBean相关的Mapping文件,文件名要与JavaBean名相同,如:User.aegis.xmll,并且与JavaBean放在同一个目录.

例子:
1) 服务接口
public interface IYMServiceFacade {
   User getUser();
}

2) JavaBean
public class User {
   private Strirng userName;
   // 这里是一个Collection
   private Set rooms;

   .....
   .....
}

3) Mapping文件(User.aegis.xml)
<?xml version="1.0" encoding="utf-8"?>
<mappings>
    <mapping>
        <property name="rooms" componentType="com.powerunion.ymservice.dto.Room"/>
    </mapping>
</mappings>

介绍:<property name="rooms" componentType="com.powerunion.ymservice.dto.Room"/>
其中的name属性就是JavaBean里面定义的rooms,componentType上面的相同,表示Collections里真正存储的类型.


注:如果服务接口的参数或者返因类型是基本类型(int, float, double等)就不需要创建Mapping文件。
详细的信息见XFire的User's Guide.


4.如果Web Services和客户端运行在同一个JVM上,可以选择使用本地传输,可以大幅提升性能。如:以下指定服务端URL的这行。
String serviceUrl = "http://localhost:8080/YM/services/ContractService";
替换为
String serviceUrl = "xfire.local://ContractService";


5. 用ant task 生成xfire 客户端代码
  
用xfire不管是配置web service,还是生成客户代码都很方便.
生成客户代码只要在用ant生成就可以了!

build.xml


代码
<?xml version="1.0"?> 
 
<project default="genfiles" basedir="."> 
    <property name="lib" value="WebRoot/WEB-INF/lib" /> 
    <path id="myclasspath"> 
        <fileset dir="${lib}"> 
            <include name="*.jar" /> 
        </fileset> 
        <pathelement location="${genfiles}" /> 
    </path> 
    <property name="code_path" value="src" /> 
    <property name="wsdl_path" value="Echo1Service.xml" /> 
    <property name="code_package" value="com.client" /> 
    <target name="genfiles"  description="Generate the files"> 
        <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="myclasspath" /> 
        <wsgen outputDirectory="${code_path}" wsdl="${wsdl_path}" package="${code_package}" binding="xmlbeans" /> 
    </target> 
</project>  
 


posted @ 2008-08-13 16:27 巴西木 阅读(871) | 评论 (0)编辑 收藏

1.avi格式
代码片断如下:
<object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA">

<param name="ShowDisplay" value="0">
<param name="ShowControls" value="1">
<param name="AutoStart" value="1">
<param name="AutoRewind" value="0">
<param name="PlayCount" value="0">
<param name="Appearance value="0 value=""">
<param name="BorderStyle value="0 value=""">
<param name="MovieWindowHeight" value="240">
<param name="MovieWindowWidth" value="320">
<param name="FileName" value="/Mbar.avi">
<embed width="400" height="200" border="0" showdisplay="0" showcontrols="1" autostart="1" autorewind="0" playcount="0" moviewindowheight="240" moviewindowwidth="320" filename="/Mbar.avi" src="Mbar.avi">
</embed>
</object>

2.mpg格式
代码片断如下:
<object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250">
<param name="Appearance" value="0">
<param name="AutoStart" value="-1">
<param name="AllowChangeDisplayMode" value="-1">
<param name="AllowHideDisplay" value="0">
<param name="AllowHideControls" value="-1">
<param name="AutoRewind" value="-1">
<param name="Balance" value="0">
<param name="CurrentPosition" value="0">
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="16777215">
<param name="DisplayMode" value="0">
<param name="Enabled" value="-1">
<param name="EnableContextMenu" value="-1">
<param name="EnablePositionControls" value="-1">
<param name="EnableSelectionControls" value="0">
<param name="EnableTracker" value="-1">
<param name="Filename" value="/mpeg/halali.mpg" valuetype="ref">
<param name="FullScreenMode" value="0">
<param name="MovieWindowSize" value="0">
<param name="PlayCount" value="1">
<param name="Rate" value="1">
<param name="SelectionStart" value="-1">
<param name="SelectionEnd" value="-1">
<param name="ShowControls" value="-1">
<param name="ShowDisplay" value="-1">
<param name="ShowPositionControls" value="0">
<param name="ShowTracker" value="-1">
<param name="Volume" value="-480">
</object>

3.smi格式
代码片断如下:
<OBJECT id=RVOCX classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA width=240 height=180>
<param name="_ExtentX" value="6350">
<param name="_ExtentY" value="4763">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="rm.rm">
<param name="CONTROLS" value="ImageWindow">
<param name="CONSOLE" value="console1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000"><embed src="../../real.smi" type="audio/x-pn-realaudio-plugin" console="Console1" controls="ImageWindow" height="180" width="240" autostart="true"></OBJECT>

4.rm格式
代码片断如下:
<OBJECT ID=video1 CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT=288 WIDTH=352>
<param name="_ExtentX" value="9313">
<param name="_ExtentY" value="7620">
<param name="AUTOSTART" value="0">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="0">
<param name="SRC" value="rtsp://203.*.*.35/vod/dawan-a.rm">
<param name="CONTROLS" value="ImageWindow">
<param name="CONSOLE" value="Clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000"><embed SRC type="audio/x-pn-realaudio-plugin" CONSOLE="Clip1" CONTROLS="ImageWindow" HEIGHT="288" WIDTH="352" AUTOSTART="false">
</OBJECT>

5.wmv格式
代码片断如下:
<object id="NSPlay" width=200 height=180 classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject" align="right" hspace="5">
<param name="AutoRewind" value=1>
<param name="FileName" value="/blog/******.wmv">
<param name="ShowControls" value="1">
<param name="ShowPositionControls" value="0">
<param name="ShowAudioControls" value="1">
<param name="ShowTracker" value="0">
<param name="ShowDisplay" value="0">
<param name="ShowStatusBar" value="0">
<param name="ShowGotoBar" value="0">
<param name="ShowCaptioning" value="0">
<param name="AutoStart" value=1>
<param name="Volume" value="-2500">
<param name="AnimationAtStart" value="0">
<param name="TransparentAtStart" value="0">
<param name="AllowChangeDisplaySize" value="0">
<param name="AllowScan" value="0">
<param name="EnableContextMenu" value="0">
<param name="ClickToPlay" value="0">
</object>

6.wma格式
放在 <body> 里面。下面是部分解释:
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" >
<param name="Filename" value="/blog/1.Wma"> <!--你文件的位置-->
<param name="PlayCount" value="1"><!--控制重复次数: “x”为几重复播放几次; x=0,无限循环。-->
<param name="AutoStart" value="0"><!--控制播放方式: x=1,打开网页自动播放; x=0,按播放键播放。-->
<param name="ClickToPlay" value="1"><!--控制播放开关: x=1,可鼠标点击控制播放或暂停状态; x=0,禁用此功能。-->
<param name="DisplaySize" value="0"><!--控制播放画面: x=0,原始大小; x=1,一半大小; x=2,2倍大小。-->
<param name="EnableFullScreen Controls" value="1"><!--控制切换全屏: x=1,允许切换为全屏; x=0,禁用此功能。-->
<param name="ShowAudio Controls" value="1"><!--控制音量: x=1,允许调节音量; x=0,禁止音量调节。-->
<param name="EnableContext Menu" value="1"><!--控制快捷菜单: x=1,允许使用右键菜单; x=0,禁用右键菜单。-->
<param name="ShowDisplay" value="1"><!--控制版权信息: x=1,显示电影及作者信息;x=0,不显示相关信息-->
</object>

7.Windows Media Player 系列(不同面板样式)
综合型:
<object classid=clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95 codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,1,5,217"
id=MediaPlayer type=application/x-oleobject width=210 height=340 standby="Loading Microsoft Windows Media Player components..." VIEWASTEXT align=MIDDLE>
<param name=AudioStream value=-1>
<param name=AutoSize value=0>
<param name=AutoStart value=1>
<param name=AnimationAtStart value=0>
<param name=AllowScan value=-1>
<param name=AllowChangeDisplaySize value=0>
<param name=AutoRewind value=0>
<param name=Balance value=0>
<param name=BaseURL value="">
<param name=BufferingTime value=5>
<param name=CaptioningID value="">
<param name=ClickToPlay value=0>
<param name=CursorType value=32512>
<param name=CurrentPosition value=-1>
<param name=CurrentMarker value=0>
<param name=DefaultFrame value=1>
<param name=DisplayBackColor value=0>
<param name=DisplayForeColor value=16777215>
<param name=DisplayMode value=0>
<param name=DisplaySize value=0>
<param name=Enabled value=-1>
<param name=EnableContextMenu value=-1>
<param name=EnablePositionControls value=0>
<param name=EnableFullScreenControls value=0>
<param name=EnableTracker value=1>
<param name=Filename value="http://202.102.*.*/flash/2/fff.swf">
<param name=InvokeURLs value=-1>
<param name=Language value=-1>
<param name=Mute value=0>
<param name=PlayCount value=1>
<param name=PreviewMode value=0>
<param name=Rate value=1>
<param name=SAMILang value="">
<param name=SAMIStyle value="">
<param name=SAMIFileName value="">
<param name=SelectionStart value=0>
<param name=SelectionEnd value=true>
<param name=SendOpenStateChangeEvents value=-1>
<param name=SendWarningEvents value=-1>
<param name=SendErrorEvents value=-1>
<param name=SendKeyboardEvents value=0>
<param name=SendMouseClickEvents value=0>
<param name=SendMouseMoveEvents value=0>
<param name=SendPlayStateChangeEvents value=-1>
<param name=ShowCaptioning value=0>
<param name=ShowControls value=1>
<param name=ShowAudioControls value=1>
<param name=ShowDisplay value=1>
<param name=ShowGotoBar value=1>
<param name=ShowPositionControls value=1>
<param name=ShowStatusBar value=1>
<param name=ShowTracker value=1>
<param name=TransparentAtStart value=0>
<param name=VideoBorderWidth value=0>
<param name=VideoBorderColor value=0>
<param name=VideoBorder3D value=0>
<param name=Volume value=-1070>
<param name=WindowlessVideo value=1>
</object>

简易型:
<EMBED src=http://www.*.com/mediadate/lxlhbcn.asf type=audio/mpeg AUTOSTART="1" loop="0">
</EMBED>

标签型:
<embed width=240 height=140 transparentatstart=true animationatstart=false autostart=true autosize=false volume=100 displaysize=0 showdisplay=true showstatusbar=true showcontrols=true showaudiocontrols=true showtracker=true showpositioncontrols=true balance=true src="http://www.*.com/mediadate/lxlhbcn.asf">
</embed>

多功能型:
    不仅可以放曲子,还能放Flash和其它视频文件。
  <object align=middle classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" class=OBJECT id=MediaPlayer width=196 height=196>
     <param name=ShowStatusBar value=0>
       <param name=Filename value="http://202.116.*.*/video/story/chinese/hynh/b.wmv">
        <embed type=application/x-oleobject codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" >
     </embed>
  </object>

网页播放器的参数含义 Windows Media Player 网页播放器 参数含义

(默认0为否,-1或1为是)
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" width="286" height="225">
    <param name="AudioStream" value="-1">
    <param name="AutoSize" value="-1">
    <!--是否自动调整播放大小-->
    <param name="AutoStart" value="-1">
    <!--是否自动播放-->
    <param name="AnimationAtStart" value="-1">
    <param name="AllowScan" value="-1">
    <param name="AllowChangeDisplaySize" value="-1">
    <param name="AutoRewind" value="0">
    <param name="Balance" value="0">
    <!--左右声道平衡,最左-9640,最右9640-->
    <param name="BaseURL" value>
    <param name="BufferingTime" value="15">
    <!--缓冲时间-->
    <param name="CaptioningID" value>
    <param name="ClickToPlay" value="-1">
    <param name="CursorType" value="0">
    <param name="CurrentPosition" value="0">
    <!--当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0-->
    <param name="CurrentMarker" value="0">
    <param name="DefaultFrame" value>
    <param name="DisplayBackColor" value="0">
    <param name="DisplayForeColor" value="16777215">
    <param name="DisplayMode" value="0">
    <param name="DisplaySize" value="0">
    <!--视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理-->
    <param name="Enabled" value="-1">
    <param name="EnableContextMenu" value="-1">
    <!-是否用右键弹出菜单控制-->
    <param name="EnablePositionControls" value="-1">
    <param name="EnableFullScreenControls" value="-1">
    <param name="EnableTracker" value="-1">
    <!--是否允许拉动播放进度条到任意地方播放-->
    <param name="Filename" value="/blog/01.wma" valuetype="ref">
    <!--播放的文件地址-->
    <param name="InvokeURLs" value="-1">
    <param name="Language" value="-1">
    <param name="Mute" value="0">
    <!--是否静音-->
    <param name="PlayCount" value="10">
    <!--重复播放次数,0为始终重复-->
    <param name="PreviewMode" value="-1">
    <param name="Rate" value="1">
    <!--播放速率控制,1为正常,允许小数-->
    <param name="SAMIStyle" value>
    <!--SAMI样式-->
    <param name="SAMILang" value>
    <!--SAMI语言-->
    <param name="SAMIFilename" value>
    <!--字幕ID-->
    <param name="SelectionStart" value="-1">
    <param name="SelectionEnd" value="-1">
    <param name="SendOpenStateChangeEvents" value="-1">
    <param name="SendWarningEvents" value="-1">
    <param name="SendErrorEvents" value="-1">
    <param name="SendKeyboardEvents" value="0">
    <param name="SendMouseClickEvents" value="0">
    <param name="SendMouseMoveEvents" value="0">
    <param name="SendPlayStateChangeEvents" value="-1">
    <param name="ShowCaptioning" value="0">
    <!--是否显示字幕,为一块黑色,下面会有一大块黑色,一般不显示-->
    <param name="ShowControls" value="-1">
    <!--是否显示控制,比如播放,停止,暂停-->
    <param name="ShowAudioControls" value="-1">
    <!--是否显示音量控制-->
    <param name="ShowDisplay" value="0">
    <!--显示节目信息,比如版权等-->
    <param name="ShowGotoBar" value="0">
    <!--是否启用上下文菜单-->
    <param name="ShowPositionControls" value="-1">
    <!--是否显示往前往后及列表,如果显示一般也都是灰色不可控制-->
    <param name="ShowStatusBar" value="-1">
    <!--当前播放信息,显示是否正在播放,及总播放时间和当前播放到的时间-->
    <param name="ShowTracker" value="-1">
    <!--是否显示当前播放跟踪条,即当前的播放进度条-->
    <param name="TransparentAtStart" value="-1">
    <param name="VideoBorderWidth" value="0">
    <!--显示部的宽部,如果小于视频宽,则最小为视频宽,或者加大到指定值,并自动加大高度.此改变只改变四周的黑框大小,不改变视频大小-->
    <param name="VideoBorderColor" value="0">
    <!--显示黑色框的颜色, 为RGB值,比如ffff00为黄色-->
    <param name="VideoBorder3D" value="0">
    <param name="Volume" value="0">
    <!--音量大小,负值表示是当前音量的减值,值自动会取绝对值,最大为0,最小为-9640-->
    <param name="WindowlessVideo" value="0">
    <!--如果是0可以允许全屏,否则只能在窗口中查看-->
</object>

上面的这个播放器是老式的那种,6.4版本!新式播放器是在MediaPlayer9.0以后出现的,也就是说只有装了9.0或9.0以上的播放器才能正常使用的。

下面是新式播放器代码,相对以前的来说要简单很多:
<object id="player" height="64" width="260" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
    <param NAME="AutoStart" VALUE="-1">
    <!--是否自动播放-->
    <param NAME="Balance" VALUE="0">
    <!--调整左右声道平衡,同上面旧播放器代码-->
    <param name="enabled" value="-1">
    <!--播放器是否可人为控制-->
    <param NAME="EnableContextMenu" VALUE="-1">
    <!--是否启用上下文菜单-->
    <param NAME="url" value="/blog/1.wma">
    <!--播放的文件地址-->
    <param NAME="PlayCount" VALUE="1">
    <!--播放次数控制,为整数-->
    <param name="rate" value="1">
    <!--播放速率控制,1为正常,允许小数,1.0-2.0-->
    <param name="currentPosition" value="0">
    <!--控件设置:当前位置-->
    <param name="currentMarker" value="0">
    <!--控件设置:当前标记-->
    <param name="defaultFrame" value="">
    <!--显示默认框架-->
    <param name="invokeURLs" value="0">
    <!--脚本命令设置:是否调用URL-->
    <param name="baseURL" value="">
    <!--脚本命令设置:被调用的URL-->
    <param name="stretchToFit" value="0">
    <!--是否按比例伸展-->
    <param name="volume" value="50">
    <!--默认声音大小0%-100%,50则为50%-->
    <param name="mute" value="0">
    <!--是否静音-->
    <param name="uiMode" value="mini">
    <!--播放器显示模式:Full显示全部;mini最简化;None不显示播放控制,只显示视频窗口;invisible全部不显示-->
    <param name="windowlessVideo" value="0">
    <!--如果是0可以允许全屏,否则只能在窗口中查看-->
    <param name="fullScreen" value="0">
    <!--开始播放是否自动全屏-->
    <param name="enableErrorDialogs" value="-1">
    <!--是否启用错误提示报告-->
    <param name="SAMIStyle" value>
    <!--SAMI样式-->
    <param name="SAMILang" value>
    <!--SAMI语言-->
    <param name="SAMIFilename" value>
    <!--字幕ID-->
</object>

Real Player 网页播放器 参数含义

参数:autostart 属性:True或是False 作用:指定是否自动播放指定的源文件
参数:backgroundcolor 属性:任何用符号“#”开头的16进制数值或是任何预定义的颜色作用:指定图像窗口的背景颜色
参数:center 属性:True或是False 作用:指定片断使用初始编码大小播放,并且在图像窗口的中央。
参数:classid 属性:"clsid:CFCDAA03-8BE4-1lcf-B84B0020AFBBCCFA:** 作用:用于指定ActiveX控件的唯一的字符串标示,可以认出嵌入的RealPalyer播放器。
参数:console 属性:任何字符串作用:可以将各种不同的RealPlayer控制聚集在网页上,这样它们可以交互使用或是保持独立,而且互相不影响
参数:controls 属性:ImageWindow,All,ControlPanel,PlavButton,PlayOnlyButton, PauseButton,StopButton,FFCtrl,RWCtrl,MuteCtrl,MuteVolume,VolumeSlider,PositionSlider,TACCtrl,HomeCtrl,InfoVolumePanel,InfoPanel,StatusBar,StatusField,PositionField 作用:可以让你指定那些控制是可见的。
参数:height 属性:任何整数值作用:指定RealPlayer元素的高度,单位:像素
参数:id 属性:任何字符串作用:为标签中的RealPlayer元素指定名字。
参数:imagestatus 属性:True或是False 作用:指定是否在图像窗口中显示状态信息,默认值是true
参数:loop 属性:True或是False 作用:可以让你指定片断是否无限循环
参数:maintainASPect 属性:True或是False 作用:默认RealPlayer拉伸所有的片断来充满整个图像窗口。
参数:name 属性:任何字符串作用:为标签中的RealPlayer元素指定名字(在标签中使用id)
参数:nojava 属性:True或是False 作用:避免启动Java虚拟机
参数:nolabels 属性:True或是False 作用:可以禁止显示标题或是版权信息(realplayer5.0以上时,它是垃圾...)
参数:noLOGO 属性:True或是False 作用:避免RealPlayer启动时在图像窗口中显示
参数:numloop 属性:任何整数值作用:让你能够指定文件片循环的次数,不需要参数loop
参数:prefetch 属性:True或是False 作用:指定在播放前,RealPlayer是否可以获得流描述信息,默认值是False
参数:region 属性:任何字符串作用:同SMIL一起使用。允许你指定使用HTML代替SMIL
参数:scriptcallbacks 属性:用逗号分割的列表作用:指定浏览器的回调监控(好高级的东东!)
参数:shuffle 属性:True或是False 作用:同多文件片的ram文件或是SMIL文件一起使用。可以让RealPlayer随机播放列表中的文件
参数:src 属性:任何合法的相对或是完整的URL 作用:指定播放的文件或是源文件的地址
参数:type 属性:字符串作用:为嵌入插件指定MIME类型
参数:width 属性:任何整数值作用:指定RealPlayer元素的宽度

RealPlayer的一些函数、方法和过程

这是 Real Player ActiveX Control Library (Version 1.0) 的所有函数与方法,有兴趣可以研究一下。

function GetSource: WideString;
procedure SetSource(const lpszNewValue: WideString);
function GetConsole: WideString;
procedure SetConsole(const lpszNewValue: WideString);
function GetControls: WideString;
procedure SetControls(const lpszNewValue: WideString);
function GetNoLabels: wordBool;
procedure SetNoLabels(bNewValue: wordBool);
function GetAutoStart: wordBool;
procedure SetAutoStart(bNewValue: wordBool);
function GetAutoGotoURL: wordBool;
procedure SetAutoGotoURL(bNewValue: wordBool);
function GetVolume: Smallint;
procedure SetVolume(nVol: Smallint);
function GetMute: wordBool;
procedure SetMute(bMute: wordBool);
function GetLoop: wordBool;
procedure SetLoop(bVal: wordBool);
function GetImageStatus: wordBool;
procedure SetImageStatus(bEnable: wordBool);
function GetPacketsTotal: Integer;
function GetPacketsReceived: Integer;
function GetPacketsOutOfOrder: Integer;
function GetPacketsMissing: Integer;
function GetPacketsEarly: Integer;
function GetPacketsLate: Integer;
function GetBandwidthAverage: Integer;
function GetBandwidthCurrent: Integer;
procedure DoPlayPause;
procedure DoStop;
procedure DoNextItem;
procedure DoPrevItem;
function CanPlayPause: wordBool;
function CanStop: wordBool;
function HasNextItem: wordBool;
function HASPrevItem: wordBool;
function HasNextEntry: wordBool;
function HASPrevEntry: wordBool;
procedure DoNextEntry;
procedure DoPrevEntry;
procedure AboutBox;
procedure EditPreferences;
procedure HideShowStatistics;
function IsStatisticsVisible: wordBool;
procedure DoGotoURL(const url: WideString; const target: WideString);
procedure DoPlay;
procedure DoPause;
function GetPosition: Integer;
function GetPlayState: Integer;
function GetLength: Integer;
function GetTitle: WideString;
function GetAuthor: WideString;
function GetCopyright: WideString;
function GetClipWidth: Integer;
function GetClipHeight: Integer;
function CanPlay: wordBool;
function CanPause: wordBool;
procedure SetPosition(lPosition: Integer);
function GetNumLoop: Integer;
procedure SetNumLoop(lVal: Integer);
function GetCenter: wordBool;
procedure SetCenter(bVal: wordBool);
function GetNoLOGO: wordBool;
procedure SetNoLOGO(bVal: wordBool);
function GetMaintainASPect: wordBool;
procedure SetMaintainASPect(bVal: wordBool);
function GetBackgroundColor: WideString;
procedure SetBackgroundColor(const pVal: WideString);
function GetStereoState: wordBool;
function GetLiveState: wordBool;
function GetShowStatistics: wordBool;
procedure SetShowStatistics(bVal: wordBool);
function GetShowPreferences: wordBool;
procedure SetShowPreferences(bVal: wordBool);
function GetShowAbout: wordBool;
procedure SetShowAbout(bVal: wordBool);
function GetOriginalSize: wordBool;
procedure SetOriginalSize;
function GetDoubleSize: wordBool;
procedure SetDoubleSize;
function GetFullScreen: wordBool;
procedure SetFullScreen;
function GetEnableContextMenu: wordBool;
procedure SetEnableContextMenu(bVal: wordBool);
function GetEnableOriginalSize: wordBool;
procedure SetEnableOriginalSize(bVal: wordBool);
function GetEnableDoubleSize: wordBool;
procedure SetEnableDoubleSize(bVal: wordBool);
function GetEnableFullScreen: wordBool;
procedure SetEnableFullScreen(bVal: wordBool);
function GetEnableMessageBox: wordBool;
procedure SetEnableMessageBox(bVal: wordBool);
procedure SetTitle(const pVal: WideString);
procedure SetAuthor(const pVal: WideString);
procedure SetCopyright(const pVal: WideString);
function GetWantKeyboardEvents: wordBool;
procedure SetWantKeyboardEvents(bWantsEvents: wordBool);
function GetWantMouseEvents: wordBool;
procedure SetWantMouseEvents(bWantsEvents: wordBool);
function GetNumEntries: Smallint;
function GetCurrentEntry: Smallint;
function GetEntryTitle(uEntryIndex: Smallint): WideString;
function GetEntryAuthor(uEntryIndex: Smallint): WideString;
function GetEntryCopyright(uEntryIndex: Smallint): WideString;
function GetEntryAbstract(uEntryIndex: Smallint): WideString;
procedure SetCanSeek(bCanSeek: wordBool);
function GetCanSeek: wordBool;
function GetBufferingTimeElapsed: Integer;
function GetBufferingTimeRemaining: Integer;
function GetConnectionBandwidth: Integer;
function GetPreferedLanguageString: WideString;
function GetPreferedLanguageID: Integer;
function GetUserCountryID: Integer;
function GetNumSources: Smallint;
function GetSourceTransport(nSourceNum: Smallint): WideString;
function GetWantErrors: wordBool;
procedure SetWantErrors(bVal: wordBool);
function GetShuffle: wordBool;
procedure SetShuffle(bVal: wordBool);
function GetVersionInfo: WideString;
function GetLastMessage: WideString;
function GetLastErrorSeverity: Integer;
function GetLastErrorRMACode: Integer;
function GetLastErrorUserCode: Integer;
function GetLastErrorUserString: WideString;
function GetLastErrorMoreInfoURL: WideString;
procedure SetPreFetch(bVal: wordBool);
function GetPreFetch: wordBool;
procedure SetRegion(const pVal: WideString);
function GetRegion: WideString;
function GetIsPlus: wordBool;
function GetConsoleEvents: wordBool;
procedure SetConsoleEvents(bVal: wordBool);
function GetDRMInfo(const pVal: WideString): WideString;
property ControlInterface: IRealAudio read GetControlInterface;
property DefaultInterface: IRealAudio read GetControlInterface;

网页中WMP视频控制之使用指南

□播放方法和属性
    除播放、暂停、停止外,媒体播放器还可用下面的属性:
    扫描(Scanning)——与录像机的快进快倒功能类似;
    搜索(Seeking)——直接移到剪辑中标记的特定上演时间;

□播放
    媒体播放器提供了两种技术来指定要播放的媒体名称(剪辑),你可以设置 FileName 属性,或调用 Open 方法。 如果 AutoStart 属性的值是 true 的话,当 FileName 属性被设置成该电影剪辑的 URL 后,该电影剪辑将开始播放;否则电影剪辑不会开始播放, 除非你调用 Play 方法。 Open 方法开始播放是异步的,它不象 Play 方法要等到其他的进程结束后才开始播放。
    媒体播放器提供了下面的类似录像机的属性和方法来控制流媒体的播放:
    Play、Stop、Pause 方法,来开始、停止、暂停流媒体。
    PlayCount 属性,设置文件播放的次数。
    AutoRewind 属性,确定当停止播放时是否返回到电影剪辑的开始部分。

□音频控制
    媒体播放器提供了下面的属性来管理音频:
    Balance 属性,确定左右音箱的声音平衡;
    Volume 属性,用来加大或降低音量;
    Mute 属性,用来关闭或打开声音;
    ※你可以将 ShowAudioControls 属性设为 true 来在控制栏添加处理声音的控件。

□扫描
    媒体播放器提供了下面的属性用以扫描:
    FastForward 方法,快进;
    FastReverse 方法,快倒;
    Rate属性,改变播放速率;
    ※要想使电影剪辑能被扫描,必须将 CanScan 和 AllowScan 属性设为 true。

□搜索
    用于搜索的属性有:
    MarkerCount 属性,指剪辑中标记的总数量;
    CurrentMaker、GetMarkerName、GetMarkerTime 方法,用于返回标记信息;
    MarkerHit 事件,当遇到标记时触发;
    CurrentPosition 属性,当前位置(用秒度量),可用来将播放头移到剪辑中指定的点;
    PositionChange 事件,当设置 CurrentPosition 属性时触发;
    ※要想搜索到任意的时间,必须将 CanSeek 属性设为 true,要想搜索到标记点,必须将 CanSeekToMarkers 属性设为 true。

□媒体播放器的外观界面
    在网页中,你可以通过相关属性来控制媒体播放器的哪些部分出现,哪些部分不出现。
媒体播放器包括如下元素:
    Video Display Panel:视频显示面板;
    Video Border:视频边框;
    Closed Captioning Display Panel;字幕显示面板;
    Track Bar;搜索栏;
    Control Bar with Audio and Position Controls:带有声音和位置控制的控制栏;
    Go To Bar:转到栏;
    Display Panel:显示面板;
    Status Bar:状态栏;
    下面的属性用来决定显示哪一个元素:
    ShowControls 属性:是否显示控制栏(包括播放控件及可选的声音和位置控件);
    ShowAudioControls 属性:是否在控制栏显示声音控件(静音按钮和音量滑块);
    ShowPositionControls 属性:是否在控制栏显示位置控件(包括向后跳进、快退、快进、向前跳进、预览播放列表中的每个剪辑);
    ShowTracker 属性:是否显示搜索栏;
    ShowDisplay 属性:是否显示显示面板(用来提供节目与剪辑的信息);
    ShowCaptioning 属性:是否显示字幕显示面板;
    ShowGotoBar 属性:是否显示转到栏;
    ShowStatusBar 属性:是否显示状态栏;

□播放列表
    媒体播放器提供下面的方法来访问播放列表中的剪辑:
    Next 方法,跳到节目(播放列表)中的下一个剪辑;
    Previous 方法,跳回到节目中的上一个剪辑;
    媒体播放器的一个特性是能够预览节目中的每一个剪辑,使用如下属性:
    PreviewMode 属性,决定媒体播放器当前是否处于预览模式;
    CanPreview 属性,决定媒体播放器能否处于预览模式;
    在windows 媒体元文件中,可以为每一个剪辑指定预览时间——PREVIEWDURATION,如果没有指定,那么默认的预览时间是10秒钟。
    你也可以用Windows 媒体元文件来添加 watermarks 与 Banners,元文件也支持插入广告时的无间隙流切换。

□节目信息
    使用 GetMediaInfoString 方法可以返回相关剪辑或节目的如下信息:
    文件名:File name
    标题:Title
    描述:Description
    作者:Author
    版权:Copyright
    级别:Rating
    URLs:LOGO icon、watermark、Banner的地址
    剪辑信息可以放在媒体文件中,也可以放在Windows 媒体元文件中,或者两者都放。如果在元文件中指定了剪辑信息,那么用 GetMediaInfoString 方法返回的就是元文件中的信息,而不会返回剪辑中包含的信息。
    在元文件中,附加信息可以放置在每一个剪辑或节目的 PARAM标签中。你可以为每个剪辑添加任意多个 PARAM 标签,用来存储自定义的信息或链接到相关站点。在 PARAM 标签中的信息可以通过 GetMediaParameter 方法来访问。
    下面的属性返回有关大小和时间的信息:
    ImageSourceHeight、ImageSourceWidth:返回图像窗口的显示尺寸;
    Duration 属性,返回剪辑的长度(秒), 要检测这个属性是否包含有效的数值,请检查IsDurationValid 属性。(对于广播的视频,其长度是不可预知的)。

□字幕
    你可以用 .smi 文件来为你的节目添加字幕。媒体播放器支持下面的属性来处理字幕:
    SAMIFileName 属性,指定 .smi 文件的名字;
    SAMILang 属性,指定字幕的语言(如果没有指定则使用第一种语言);
    SAMIStyle 属性,指定字幕的文字大小和样式;
    ShowCaptioning 属性,决定是否显示字幕显示面板;

□脚本命令
    伴随音频、视频流,你可以在流媒体文件中加入脚本命令。脚本命令是多媒体流中与特定时间同步的多对Unicode串。第一个串标识待发命令的类型,第二个串指定要执行的命令。
当流播放到与脚本相关的时间时,控件会向网页发送一个 ScriptCommand事件,然后由事件处理进程来响应这个事件。脚本命令字符串会作为脚本命令事件的参数传递给事件处理器。
    媒体播放器会自动处理下面类型的内嵌脚本命令:
    1)URL型命令:当媒体播放器控件收到一个URL型的命令时,指定的URL会被装载到用户的默认浏览器。如果媒体播放器嵌在一个分帧的HTML文件中,URL页可以装载到由脚本命令指定的帧内。如果脚本命令没有指定一个帧,将由 DefaultFrame 属性决定将 URL 页装入哪一帧。
    你可以通过设置 InvokeURLs 属性来决定是否自动处理 URL 型的脚本命令。如果这个属性的值为 false ,媒体播放器控件将忽视 URL型命令。但是脚本命令事件仍会触发,这就允许你有选择地处理 URL 型命令。
    URL 型命令指定的是 URL 的相对地址。基地址是由 BaseURL属性指定的。媒体播放器控件传送的脚本命令事件的命令参数是链接好的地址。
    2)FILENAME型命令:当媒体播放器控件收到一个FILENAME型的命令时,它将 FileName属性设置为脚本命令提供的文件,之后媒体播放器会打开这个文件开始播放。 媒体播放器控件总是自动处理 FILENAME 型命令,不象 URL 型命令,它们不能被禁止。
    3)TEXT型命令:当媒体播放器控件收到一个 TEXT型的命令时,它会将命令的内容显示在控件的字幕窗口。内容可以是纯文本的,也可以是 HTML。
    4)EVENT型命令:当媒体播放器控件收到一个 EVENT型的命令时,它会在媒体元文件中搜索 EVENT 元素的 NAME 属性。如果 NAME 属性与脚本命令中的第二个字符串匹配,媒体播放器控件就执行包含在 EVENT 元素中的条目。
    5)OPENEVENT型命令:当媒体播放器控件收到一个 OPENEVENT型的命令时,它会在媒体元文件中检查 EVENT 元素,并打开匹配的标题,但不播放,直到收到来自 EVENT型命令的同名真实事件。

□捕捉键盘和鼠标事件
    EnableContextMenu 与 ClickToPlay 属性为用户提供了在图像窗口进行操作的方法。
如果 EnableContextMenu 属性为 true ,在图像窗口右击鼠标可以打开关联菜单,如果将ClickToPlay 属性设为 true ,用户可以单击图像窗口进行播放与暂停的切换。
    要接收鼠标移动和单击事件,请将 SendMouseMoveEvents 和 SendMouseClickEvents 属性设为 true 。鼠标事件有:
    MouseDown,当用户按下鼠标时产生;
    MouseUp,当用户释放鼠标时产生;
    MouseMove,当用户移动鼠标时产生;
    Click,当用户在媒体播放器上单击鼠标按钮时产生;
    DbClick,当用户在媒体播放器上双击鼠标按钮时产生;
    要接收键盘事件,请将 SendKeyboardEvents 属性设为 true 。键盘事件有:
    KeyDown,当用户按下一个键时产生;
    KeyUp,当用户释放一个键时产生;
    KeyPress,当用户按下并释放一个键时产生;

□监测流状态与网络链接
    流状态属性包括:
    PlayState:播放状态;
    OpenState:打开状态;
    Bandwidth:带宽;
    支持的事件有:
    OpenStateChange:打开状态改变(仅当SendOpenStateChangeEvents属性为true时触发)
    PlayStateChange:播放状态改变(仅当SendPlayStateChangeEvents属性为true时触发)
    EndOfStream:流结束时触发;
    NewStream:打开新流时触发;
    网络接收属性包括:
    ReceptionQuality:接收质量;
    ReceivedPackets:已经收到的包;
    LostPackets:丢失的包;
    监测缓冲的属性有:
    BufferingTime:缓冲时间;
    BufferingCount:缓冲次数;
    BufferingProgress:缓冲进程;
    Buffering:缓冲事件;

□错误处理
    媒体播放器提供了内建的错误处理功能——在对话框或状态栏显示错误信息。 另外,你可以自己添加错误处理程序。如果 SendErrorEvents 属性设置为 true,将不会显示错误框,而是发送错误事件;如果 SendErrorEvents 属性设置为 false,将显示错误框,而是发送错误事件。
    媒体播放器支持下面的错误处理事件:
    Error 事件,指有危险性错误发生;
    Warning 事件,指发生了非危险性的错误;
    当你的应用程序接收到一个错误事件,你可以检测下面的属性来确定具体的错误信息:
    HasError:检测目前的媒体播放器是否有错误;
    ErrorCode:提供与该类型错误相关的代码值;
    ErrorDescription:提供错误的描述信息;
    ErrorCorrection:指定媒体播放器对该类型的错误进行校正;

□播放CD
    媒体播放器将 CD 看作(在每个音轨的开头具有标记的)单一音频流。 要在网页中使用CD,你需要将 FileName 属性设为 CDAUDIO:,必须带有冒号,如下所示:
<HTML>
<HEAD><TITLE>CD Audio Playback Example</TITLE></HEAD>
<BODY>
<OBJECT ID="MediaPlayer"
    CLASSID="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
    WIDTH="320"
    HEIGHT="508"
    STYLE="position:absolute; left:0px; top:70px;"    >
    <PARAM NAME="FileName" VALUE="cdaudio:">
    <PARAM NAME="AutoStart" VALUE="0">
    <PARAM NAME="ShowControls" VALUE="1">
    <PARAM NAME="ShowStatusBar" VALUE="1">
    <PARAM NAME="ShowDisplay" VALUE="1">
</OBJECT>
</BODY>
</HTML>
    之后你可以用 Play 方法播放 CD 了。
    你可以在 windows 媒体元文件中指定播放顺序以及每个音轨的信息。示例如下:

<ASX VERSION="3.0">
    <TITLE>CD Audio with the Media Player</TITLE>
    <AUTHOR>Windows Media Technologies</AUTHOR>
    <COPYRIGHT>(c) 1999, Microsoft, Inc.</COPYRIGHT>

    <ENTRY>
      <TITLE>Track 1: Title 1</TITLE>
      <REF href="/blog/cdaudio:" />
      <STARTMARKER NUMBER="1"/>
      <ENDMARKER NUMBER="2"/>
   </ENTRY>

    <ENTRY>
      <TITLE>Track 2: Title 2</TITLE>
      <REF href="/blog/cdaudio:" />
      <STARTMARKER NUMBER="2"/>
      <ENDMARKER NUMBER="3"/>
    </ENTRY>

    <ENTRY>
      <TITLE>Track 3: Title 3</TITLE>
      <REF href="/blog/cdaudio:" />
      <STARTMARKER NUMBER="3"/>
      <ENDMARKER NUMBER="4"/>
    </ENTRY>

    <ENTRY>
      <TITLE>Track 4: Title 4</TITLE>
      <REF href="/blog/cdaudio:" />
      <STARTMARKER NUMBER="4"/>
    </ENTRY>
</ASX>

posted @ 2008-08-13 13:16 巴西木 阅读(92) | 评论 (0)编辑 收藏

仅列出标题
共33页: First 13 14 15 16 17 18 19 20 21 Last