这节我们来看看系统中的ActiveX控件的效果。
ActiveX是个精灵!而且是个网络精灵!ActiveX是COM规范的演化产物。
说到这里可能你们还没有理解COM规范,其实你们只要用计算机,用Windows操作系统你们就在用COM规范开发出来的软件!你们的office办公软件系统就用到了大量COM规范,你们用到的很多Windows系统服务都在使用COM+服务。我觉得最变态的使用COM技术的典范就是AUTOCAD,你们可以用注册表软件查看一下装上AUTOCAD之后,它的注册表分支树下面多了多少GUID!以至于如果想完全删除它呵呵,花的功夫可就大了。
当然我们来看看COM技术规范的发展史:
1991年,随着Windows3.x的发布,微软公司发布了一种叫做OLE1.0(Object Linking and Emebedding)的规范。它使用面向对象技术,是一种处理复合文档的方法,可以在一个文档中同时保存多种格式的数据,在当时来说这些功能的出现实在是太神奇了,但其设计是以文档为中心的,本身有一些缺陷,所以并不出名。
1993年,微软发布了OLE2.0规范,它有很多的特点如就地编辑,复合文档中对象的编辑器可以和该文档的编辑器天衣无缝地结合在一个窗体内等等。所以来说2.0是成功的,并且得到了当年的PC Magazine的技术优秀奖和PC/Computering的软件革新MVP奖。这里2.0所有成就的基础就是我们的组件对象模型(Component Object Model ,COM)规范。
1995年,随着windows95的发布和Internet的发展,微软意识到Internet上的商业利润,决定通过编程来获得这一切。1996年发布了ActiveX技术,从而导致了ActiveX控件的产生。其实ActiveX没有什么真正的改变,它不过s是OLE技术的扩展罢了,其目的就是为了使用方便,有利于网上传输。 直到现在Internet网络上都充斥着大量的ActiveX控件, 如很多流媒体技术的展现都是用的ActiveX控件(Media Player)网络电视,我在工商银行的网上银行上查工资,其登陆界面就使用了ActiveX控件,如果你在网页上禁用掉ActiveX控件,呵呵,那你就跑到工商银行去手工查余额吧。
进入正文之前我需要大家先去找点Delphi开发ActiveX控件的书阅读一下。看看如何才能开发出一个ActiveX控件出来。
首先我们看看Delphi的Type Library界面:
看见了吗,我们建了一个名叫AFJITChart的ActiveX控件。他的GUID是{20E29E23-2B05-4564-BA85-44DC4BB27B52}以后我们经过注册之后,在注册表中就能查找到这个控件了。
看看AFJITChart的Delphi创建界面:
我们甚至可以用其他的编程软件来调用我们在Delphi里创建的这个控件。
(AFJITChart控件插入之后的效果)
上面这个界面你们应该比较熟悉吧,这是用VB来调用我们刚才建好的AFJITChart控件。

(AFJITChart控件插入之后的效果)
上面这个界面就是在.net中调用AFJITChart控件。
也就是说一旦我们创建好ActiveX控件实现统一接口之后我们就可以任何一种编程语言去调用它!(除了Java ><P)
当然我们真正要做的事是将AFJITChart控件嵌入到网页中:
看看这个项目中的一个JSP页面
<%@ page contentType="text/html;charset=GBK"%> 2
<%@ include file="/common/taglibs.jsp" %>3
<%@ page import="com.zijin.util.Constants"%>4

5
<html:html>6
<head>7
<title>9520配电变压器综合测控数据管理系统</title>8
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">9
<link rel="stylesheet" type="text/css" href="/zijin/css/shared.css">10
<script language="JavaScript" src="/zijin/js/initialize.js"></script>11
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="fun1()">12
<table width="100%" border="0" cellspacing="0" cellpadding="4" align="center">13
<tr>14
<td class="tdsectionbar">电流曲线</td>15
</tr>16
</table>17
<center>18

19
<OBJECT20
id="Chart"21
classid="clsid:20E29E23-2B05-4564-BA85-44DC4BB27B52"22
codebase="/zijin/widget/AFJITChart.ocx#version=2,0,1,13"23
width=55924
height=56825
align=center26
hspace=027
vspace=028
>29
</OBJECT>30
<html:form method="post" action="/CurrentCurveShow">31
<input type="hidden" name="ipaddress" value='<%=Constants.getProps().get("PTX_IP")%>'>32
<input type="hidden" name="a1" value='<%=request.getParameter("transformer")%>'>33
<input type="hidden" name="a2" value='<bean:write name="CurrentCurveForm" property="a2"/>'>34
</html:form>35
</center>36
</body>37
<script language="VBScript">38
sub fun1()39
Chart.SetServerIP(document.all("ipaddress").value)40
Chart.SetServerPort(8003)41
Chart.SocketActive(1)42
Chart.SetUa(0)43
Chart.SetUb(0)44
Chart.SetUc(0)45
Chart.SetIa(1)46
Chart.SetIb(1)47
Chart.SetIc(1)48
Chart.SetMaxL(1)49
Chart.SetMinL(1)50
Chart.SetProtacalID(1)51
Chart.SetAddress(1)52
Chart.SetComAddress(document.all("a2").value)53
Chart.SetCammondID(1)54
Chart.SetMax(240)55
Chart.SetMin(10)56
Chart.ChartStart()57
Chart.AFStart58
end sub59
</script>60
</html:html>61

这个上面的19~29行就是调用我们的AFJITChart控件,看看21行的classid,是不是就是我们生成的GUID。39~57行是对我们的AFJITChart控件附值,39~57行所调用的接口函数在我们的第一张图显示的Type Library里已经定义了。其实当这个jsp页面运行的时候,系统首先要通过这个GUID值在注册表里找到我们的AFJITChart控件,然后才能加载AFJITChart控件。
看看实际的运行图:
如此一来,我们的网页出现了实时动态图像!
其实这个系统中很多网页都是这么完成的,再看看其他的界面。

整个运行效果就像在视频聊天。你们论文中只要写到ActiveX的运行效果就可以了。具体编写可能需要我专门辅导。
浙公网安备 33010602011771号