利用OLE 程序员可以定义一组命令使它们进入到其它程序中这些命令可带参数看起来很象应用程序在调用函数或过程一样采用上述办法 可以在人不参与的情况下就能使得两个应用程序的相互作用
被自动化的程序称作自动化对象或自动化服务器 操作或自动化其他程序的应用程序称为自动化控制器或自动化客户器
Delphi完全支持OLE的应用程序自动化可以用Delphi 编写自动化控制器和服务
器在应用程序之间可编程的潜能是巨大的用户可以创建宏或者其它命令 使得某个应用程序能透过其它应用程序进行工作已经存在的应用程序的宏语言很容易被扩展它可以包括一组别的应用程序能够执行的命令和函数调用
现在介绍两个应用程序其中MemoEditdpr 是多文档界面的文本编辑器作为OLE自动化服务器AutoFromdpr是自动化控制器运行AutoForm前在Delphi集成开发环境中单击菜单(run | parameters)Delphi弹出运行参数对话框如图输入参数后运行状态如图AutoForm窗体的多个按钮可对MemoEdit进行操作如按Creat按钮MemoEdit产生三个子窗体如图按AddText子窗体将出现This text was added through OLE Automation的字符串
MemoEdit包括三个单元
Mainfrom MDI主窗体
EditFrom MDE子窗体和自动化类
MemoAuto 应用程序自动化对象
下面结合例程讲述OLE自动化的基本概念及开发
TAutoObject对象
TAutoObject 是Delphi自动化服务器中所有对象的基类任何自动化对象都是从TAutoObject类派生出来的
OLE对象的定义与其它类的定义类似它的automated部分象普通类的public部分OLE控制器可引用在这部分声明的属性和方法编译器把automated部分创建成OLE自动化对象的入口但automated部分的代码有很多限制
● 属性方法可以定义但不能定义域
● 所有属性参数函数类型必须是以下类型之一
SmallIntIntegerSingleDoubleCurrencyTDateTimeStringWordBool Varint
● 属性声明只能包括访问定义符(read and Write)其它定义符如indexstored
defaultodefault均不能使用
● 访问定义符必须列出相应的方法标识符不能使用域标识符
● 支持数组类型
● 不允许属性重载
● 方法是可以是虚拟的但不能是动态的允许方法重载
在EditFrom单元中定义了TMemoDoc类
type
TMemoDoc = Class(TAutoObject)
private
FEditForm : TEditForm;
funtion CretFileName : String;
funtion CretModiFied : WordBool;
procedure SetFileName(Const Value : String)
automated
procedure Clear;
procedure Ineart(Const Text : String)
procedure Save;
procedure Close;
procedure FileName : String read GretFileName write
SetFileName;
procedure Modified : WordBool read GretModified
end;
TMemeDoc类是MemoEdit程序的内部自动化类因此不需要注册外部OLE自动化控制器对它不能直接引用如果要使外部控制器对自动化对象进行操作则要在声明自动化对象的单元中调用Automation RegisterClass 进行注册例程MemoAuto 单元定义了TMemoApp对象并进行注册
unit MemoAuto
…
type
TMemoApp = Class(TAutoObject)
implementation
…
procedure RegisterMemoApp
Const
AutoClassInfo : TAutoClassInfo = (
AutoClass : TMemoApp;
ProgID : MemoEditApplication
ClassIn : {FIFF D CF BDCF DAFOEB};
Description : Memo Editor Application;
Instancing : acSingle Instance )
begin
AutomationRegisterClass(AutoClassInfo)
end;
inibialization
RegisterMemoApp;
end;
自动化对象要在initialization部分中对自动化对象进行注册 注册的信息用以唯一辨识服务器对象把一个自动化对象加入到服务器中要用到这些信息程序一旦注册了自动化对象全局自动化对象将用OLE自动化API进行自动管理
[] [] [] []