昨天发现一个客户在使用我们的软件产品时,网络指数的图表不显示;我们的报表图表是使用VML技术制作的。我查看客户机器C:/Program Files/Common Files/Microsoft Shared/VGX目录中不存在vgx.dll文件,所以我从别的机器上复制了这个文件放在其中并运行:regsvr32.exe "C:/Program Files/Common Files/Microsoft Shared/VGX/vgx.dll"
然后客户的图表就能正常显示了!
VML的基本概念
VML是The Vector Markup Language(矢量可标记语言)的缩写。是微软1999年9月附带IE5.0发布的以最简洁的标记代码,在WEB页快速绘制输出矢量图型(线段、圆形、矩形、圆矩形、矢量图像、曲线、多边形、弧型)、并修饰这些图形的(边框、阴影、填充、背景、渐变、箭头、3D)等等外观效果。VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态的效果。
下面介绍一下VML的优点:
基于XML标准
XML是公认拥有无穷生命力的下一代网络标记语言, VML具有先天的优势,它的表示方法简单,易于扩展等等。
支持高质量的矢量图形显示
矢量的图形,意味着图形可以任意放大缩小而不损失图形的质量,这在制作地图上有很大用途。
VML支持广泛的矢量图形特征,它们基于由相连接的直线和曲线描述路径。
在VML中使用两个基本的元素:shape和group。这两个元素定义了VML的全部结构;shape描述一个矢量图形元素,而group用来将这些图形结合起来,这样它们可以作为一个整体进行处理。
VML规范包括大量的支持多种不同矢量图形特征的元素。下面是VML的预定义图形元素:
l Shape
l Path
l Line
l Polyline
l Curve
l Rect
l Roundrect
l Oval
l Arc
l Group
由文本构成的图像,并可集成到HTML
由于VML使用简单的文本来表示图像,这样就可用很少的字节来表示比较复杂的图像。VML与HTML兼容,通过在HTML中声明VML命名空间并声明处理函数,就可以和其他HTML元素一样使用VML元素,在客户端浏览器显示图像。VML标记里面可以定义DHTML大部分属性和事件,比如说id, name, title, 等等。
支持交互与动画
但VML的功能不只是绘图,他还可以在图形中嵌入文本,并可实现超链,还可通过脚本语言实现一定的动画功能。
在VML里面,标记使用的是XML扩张,需要一个namespace(命名空间),你可以使用惯用的“v”作为命名空间,使用IE5.0到IE6.0通用的定义如下:
xmlns:v="urn:schemas-microsoft-com:vml">
xmlns 全称就是XML NameSpace 也就是命名空间。Behavior(行为)也是IE5.0新推出的东西,它的功能非常强大,结合样式表,可以给任何HTML对象增加行为(新的属性、方法、事件),而在这里,它的用处是把命名空间“v”和系统预定义的行为VML连接。这样定义以后,你就可以使用下面的标记了,和普通的HTML标记有所区别,每个标记都增加了一个命名空间:
和其他HTML元素一样,VML标记里面可以定义DHTML大部分属性和事件,比如说id,name,title,onmouseover等等。在写法上VML比较灵活,很多属性既可以写在标记里面,又可以独立出一个新的标记来表示:
等同于下面的写法:
当然不是所有的属性都可以写成独立的标记,常用的比如说上面的 Stroke(按我的理解可以翻译成线性),Path,Shadow,Fill(填充)等,VML这样的方式可以理解为 shape 的属性分类,使属性更直观。
Shape 对象派生出来的一些对象,更加直接的图象,比如说 Rect(矩形),RoundRect(圆边的矩形),Oval(圆),Line(线),PolyLine(不规则折线),Image(图形文件)等等,以后将对这些对象细细描述。
VML所绘制的每一个图形,都跟HTML一样是一个图形对象,同样支持DHTML对象编程模型、DHTML事件编程模型。轻松的读取、更改VML图形对象的各种属性,响应用户触发的鼠标、键盘等事件,实现与用户交互。如果有机的配合setTimeout、setInterval两个定时器方法,则能实现类似Flash般复杂的动画,输出质量相当的好。只要DHTML、JS or VBS编程功底足够深,任何复杂的动画都能实现!