VB 版 (精华区)

发信人: bloom (├┝┞┟┠┡┢┣), 信区: VB
标  题: 九、用Visual Basic 6.0设计ActiveX/ActiveX Doc
发信站: 哈工大紫丁香 (2000年08月09日15:26:34 星期三), 转信


  基于部件的开发是目前最流行的方法论。
  程序员可以把经过测试的标准部件装配成应用程序,所以应用部件开发方法可以缩
短编程时间,并开发出更强有力的产品。转向部件软件已成为软件工业中最引人注目的
一大趋势。在Windows 平台上的部件编程,主要是微软公司致力的部件对象模型 (COM)
,包括 Automation 和 ActiveX 规范,使用户所创建的软件部件可以与购买的软件部件
一起顺利运行。
  VB6使得实现ActiveX 部件的创建更加容易。Visual Basic 为快速创建、调试和部
署软件部件提供了 ActiveX 控件、ActiveX 文档、代码部件以及提供对象的应用程序等
向导或工具。
  确定部件的类型可以这样考虑:如果需要提供服务的部件是不可视的,就要建立一
个代码部件,或者是ActiveX EXE或者是ActiveX DLL。 如果所需要建立的部件能够与您
的应用程序运行在同一个进程中,则应该建立一个ActiveX DLL。例如,能够执行复杂计
算的部件就属于这种情况。
  如果您需要的是一个可视的部件,并且在设计时能够被拖放到一个应用程序中,那
么应该建立的是ActiveX控件。例如,一个能够正确格式化并验证电话号码的“电话号码
”控件,就属于这种情况;这样的控件无疑在许多应用程序中都是有用的。
  以下仅以VB6本身带的例子(建立一个ActiveX DLL,向外提供一个将字符串顺序颠倒
的函数)为例,作一简单讲解:
  (1)首先新建工程,类型为“ActiveX DLL工程”。
  (2)VB 将自动为该工程自动添加一个类模块 Class1。
  (3)按 F4 键打开“属性”窗口。双击“名称”属性并把它改成 Thing。以后在通过
类创建对象时需要使用这个名称。
  (4)Instancing 属性的缺省值是 MultiUse,不必改变。
  (5)在“工程”菜单中,单击“Project1 属性”打开“工程属性”对话框。选择“
通用”选项卡,填写以下信息,然后单击“确定”。
  工程名:ThingDemo ,同时用作部件的类型库的名称,如果两个部件各自提供了一
个 Thing 类,那么需要对类名进行完全的限定,以区分到底要使用哪一个部件的 Thin
g 类,例如 ThingDemo.Thing。
  启动对象:Sub Main()。
  工程描述:描述出工程的功能或作用等
  (6)添加一个模块,并在模块中键入以下代码:
  Public gdatServerStarted As Date
  Sub Main()
  '部件开始时要执行的代码,
  '对第一个对象的请求作出反应。
  gdatServerStarted = Now
  Debug.Print “E xecuting Sub Main”
  End Sub'为对象提供唯一标识符的函数。
  Public Function GetDebugID() As Long
  Static lngDebugID As Long
  lngDebugID = lngDebugID + 1
  GetDebugID = lngDebugID
  End Function
  (7)保存工程。工程名为 ThingDemo。
  (8)接下来,要为类创建属性,这需要在类模块中添加公共变量和属性过程。要为类
创建方法,需要在类模块中添加 Public Sub 和 Public Function。下面的步骤为 Thi
ng 类创建了两个属性和一个方法:
  Name 属性是可以由客户应用程序检索并设置的字符串。
  DebugID (只读)属性返回一个顺序号,表示 Thing 对象创建的次序。
  ReverseName 方法颠倒 Name 属性中字母的顺序。
  (9)在类模块中声明
  Public Name As String
  (10)在 Thing 类模块中创建一个只读的属性DebugID,请加入以下代码:
  Private mlngDebugID As Long ' 加到声明部分
  Public Property Get DebugID() As Long
  DebugID = mlngDebugID
  End Property
  由于 DebugID 是只读的属性,因此客户程序仅能读取而不能修改它。引用的方法是
 对象名.属性,例如:
  Private Sub Command1_Click()
    Dim t As ThingDemo.Thing
    Set t = New ThingDemo.Thing
    MsgBox t.DebugID
  End Sub
  (11)创建 ReverseName 方法:
  在“工具”菜单中,单击“添加过程”打开“添加过程”对话框。在“名称”框中
,输入 ReverseName。单击“子程序”和“公共的”,然后单击“确定”。
  在 Thing 类模块的新的 Sub 过程中输入下列代码:
  Public Sub ReverseName()
  Dim intCt As Integer
  Dim strNew As String
  For intCt = 1 To Len(Name)
  strNew = Mid$(Name, intCt, 1) & strNew
  Next
  Name = strNew
  End Sub
  (12)类模块有两个内置的事件:Initialize 和 Terminate。Initialize 事件过程
中的代码在创建对象时首先执行,领先于其它任何设置属性或执行方法的动作。
  在对象的所有引用都被释放以后要执行 Terminate 事件中的代码,然后对象就被破
坏。
  在VB的例子中,加入了一些代码来观察对象被创建和销毁的状态提示代码,在此忽
略。
  (13)至此,整个工程建立完毕,就可以测试乃至编译了。
  (14)测试的方法很简单,再“添加”一个测试工程,然后将测试工程和上述的工程
组成一个“工程组”。然后在“工程”菜单中,单击“引用”打开“引用”对话框。选
择“ThingDemo”,然后单击“确定”。这样测试工程就可以使用 ThingDemo 了,包括
属性、方法、事件等。
  ActiveX EXE 的设计方法和ActiveX DLL一样,只不过DLL运行在调用者进程,而EX
E拥有自己的进程,甚至可以被部署在网络中的任意一台机器上,只要他们支持 DCOM 即
可。
  ActiveX 控件与ActiveX DLL 有所不同,控件一般都是可视的,而DLL都是不可视的
,可以接受用户的输入和向外部显露某种信息。有了VB6,其设计方法却并不复杂,读者
有了上述基础,再稍微阅读一下MSDN资料,就可以轻松设计自己的控件。
--
├┝┞┟┠┡┢┣ ※↑

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.226.226]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.233毫秒