对象链接和嵌入(Object Linking and Embeding)是一组服务功能它提供了一种用源于不同应用程序的信息创建复合文档的强有力方法 对象可以是几乎所有的信息类型如文字位图矢量图形甚至于声音注解和录像剪辑等
Windows附件组中的书写器是应用OLE的实例使用单击对象 | 插入菜单项 书写器弹出插入对话框对话框中列出了多个OLE服务器程序如公式编辑工具绘图工具报表生成工具用户双击鼠标左键可激活一个OLE服务器在OLE服务器中可编辑OLE对象当用户返回到书写器中时在书写器文档中将出现OLE对象
Delphi支持OLE技术Delphi可以创建OLE应用程序Delphi可创建OLE自动化服务器和控制器程序本章通过例程介绍对象链接与嵌入的基本概念Delphi创建OLE对象的方法OLE自动化的概念以及如何开发OLE自动化服务器和控制器
OLE简介
OLE和OLE
迄今为止有两种版本的OLE:OLE和OLE当用户在OLE 服务器中激活OLE对象服务器程序在前台打开自己的窗体并获得焦点OLE窗体失去焦点存在于单独的窗体之中
OLE服务器采用本地(in place)激活方式本地激活意味着服务器菜单与应用程序菜单要进行融合服务器的状态条更换应用程序状态条服务器的工具条更换应用程序工具条OLE对象在应用程序窗体中进行编辑但所有过程均由服务器处理
创建OLE对象的服务器决定了OLE的激活方式如果一个OLE的对象在OLE 编译的应用程序中打开它将采用OLE的方式
链接与嵌入
链接对象的数据保存在OLE服务器创建的文件中嵌入对象的数据保存在OLE应用程序中
链接对象必须以文件形式保存只有对OLE服务器已经创建好的OLE对象 才能进行OLE链接链接的OLE对象文件可被OLE应用程序或其它程序进行修改OLE 服务器和其它OLE应用程序也可以访问和修改OLE对象对象数据保存在某一处但可以被多个应用程序访问
Delphi应用程序可以得到OLE对象文件中的最新数据当OLE 对象数据被应用程序修改时这些变化将在所有包含该对象的其它应用程序中体现
嵌入对象保存在OLE应用程序中其它应用程序不能访问该对象只有在OLE应用程序中激活OLE对象才能对其进行编辑嵌入的OLE对象不需要保存在文件中所有数据都在应用程序中这就确保了OLE数据不会被偶然地删除或修改不足之处是应用程序的规模因为保存了OLE数据而增大了
如果用户想保存对嵌入对象的修改可以把OLE数据存入文件中本章第 节将详细讨论这个问题
使用链接或嵌入的原则
想要对源对象进行修改及将这些修改反映到其他与源对象链接的应用程序或文本中源对象可能被多个OLE应用程序应用程序频繁修改源对象的文件不会被频繁移动且不会被删除
对象很大一般通过网络或电子邮件进行分配
对源对象进行修改并将这些修改反映在一个特定的应用程序或文本中源对象不可能被一个OLE应用程序频繁修改源对象的文件可能被频繁移动且不会被删除
对象很小或对象很大却无法通过网络或电子邮件进行分配
设计状态OLE对象的创建
在Delphi中可分别在设计状态或运行状态创建OLE对象表说明了两种状态创建对象的差别
设计运行状态OLE对象的创建
对象保存在运行文件中增加了所需编译的程序的规模开发者需在设计时访问OLE服务器运行时OLE对象已经创建减小了运行时间 OLE对象在设计运行时间可行性编辑应用程序的OLE对象数目在设计时已经确立
对象保存在一个文件中或只在运行时才有减小了编译程序的规模开发者不需要在设计时访问OLE服务器运行时OLE对象已经创建增加了运行时间OLE对象只能在运行时编辑应用程序可以在运行时创建新的OLE对象在设计状态OLE服务器不能被本地激活只能在自己的窗体内激活但在运行状态
只要OLE服务器支持本地激活就可以使用这种方式
OLE类文件项目
OLE类决定创建OLE对象的服务器有些应用程序需要创建多种类型的OLE对象例如应用程序同时链接或嵌入公式图片等OLE类也决定OLE对象所包含的数据类型链接或嵌入对象均要定义OLE类
OLE文件是包含OLE对象数据的源文件链接对象必须使用对象文件因为链接对象在文件中保存如果应用程序从已存在的源文件中创建嵌入对象也要使用OLE文件例如如果链接到QuattiPro笔记本的OLE对象TUTORWBI存储在D:\DFFICE\QPW目录下则OLE文件就是D:\DFFICE\QPW\TUTORWBI值得注意的是OLE文件只能为链接对象所定义而对于嵌入对象只需定义OLE类
OLE项目是代表链接或嵌入数据的OLE文件中的一部分当应用程序希望OLE对象包含比OLE文件小的数据块时则必须使用OLE项目
例如在QuattiPro笔记本中OLE对象链接了GasCosts的B 到B 范围的网格OLE项目是$GasCosts;$B$$B$
设计状态OLE对象的创建
Dephi可以在设计状态和运行状态中创建OLE对象本节介绍设计状态OLE对象的创建
TOLEContainer部件
要创建OLE对象需在窗体中加入OLE包容器部件 应用程序部件包含链接或嵌入的对象用该部件可显示在OLE服务器编辑的数据部件的ObjClassObjDocObjItem 属性分别定义OLE类文件项目要定义OLE对象是否本地激活使用InPlaceActive 属性如果OLE对象可以本地激活OLE服务器菜单将与OLE应用程序的菜单进行融合GroupIndex属性的值将决定菜单融合情况
OLE对象创建的步骤
在窗体中增加OLE包容器部件
在Object inspector中单击ObjClass或ObjDoc属性的省略按钮将出现插入对象对话框
如果要插入的OLE 对象已存储在文件中选择Creat From File而后定义该对象的文件名和路径名如果是链接对象则选择链接检查框 如果是嵌入对象选择Creat new并在对象类型列表框中选择OLE对象
选择OK按钮
如果是创建新对象OLE服务器将激活则可对OLE对象进行编辑完成编辑后关闭OLE服务器典型的例子是单击服务器中的File或File|Update菜单
此时ObjClass属性中包含了相应的值如果OLE对象从已存在的文件中创建或插入一
个链接对象ObjDoc属性包含了OLE文件
[] [] [] [] []