第八章-对象链接与嵌入(一)(1)

对象链接和嵌入(Object Linking and Embeding)是一组服务功能,它提供了一种用源于不同应用程序的信息创建复合文档的强有力方法。 对象可以是几乎所有的信息类型,如文字、位图、矢量图形,甚至于声音注解和录像剪辑等。

Windows附件组中的书写器是应用OLE的实例,使用单击“对象 | 插入”菜单项, 书写器弹出插入对话框,对话框中列出了多个OLE服务器程序,如公式编辑工具,绘图工具,报表生成工具。用户双击鼠标左键,可激活一个OLE服务器。在OLE服务器中可编辑OLE对象,当用户返回到书写器中时,在书写器文档中将出现OLE对象。

Delphi支持OLE技术,Delphi1.0可以创建OLE应用程序,Delphi2.0可创建OLE自动化服务器和控制器程序。本章通过例程介绍对象链接与嵌入的基本概念,Delphi创建OLE对象的方法,OLE自动化的概念以及如何开发OLE自动化服务器和控制器。 

8.1 OLE简介 

8.1.1 OLE1.0和OLE2.0 

迄今为止,有两种版本的OLE:OLE1.0和OLE2.0。当用户在OLE1.0 服务器中激活OLE对象,服务器程序在前台打开自己的窗体,并获得焦点。OLE窗体失去焦点,存在于单独的窗体之中。

OLE2.0服务器采用“本地”(in place)激活方式。本地激活意味着服务器菜单与应用程序菜单要进行融合,服务器的状态条更换应用程序状态条,服务器的工具条更换应用程序工具条。OLE对象在应用程序窗体中进行编辑,但所有过程均由服务器处理。

创建OLE对象的服务器决定了OLE的激活方式。如果一个OLE1.0的对象在OLE2.0 编译的应用程序中打开,它将采用OLE1.0的方式。 

8.1.2 链接与嵌入 

链接对象的数据保存在OLE服务器创建的文件中,嵌入对象的数据保存在OLE应用程序中。

链接对象必须以文件形式保存,只有对OLE服务器已经创建好的OLE对象, 才能进行OLE链接,链接的OLE对象文件可被OLE应用程序或其它程序进行修改,OLE 服务器和其它OLE应用程序也可以访问和修改OLE对象。对象数据保存在某一处,但可以被多个应用程序访问。

Delphi应用程序可以得到OLE对象文件中的最新数据。当OLE 对象数据被应用程序修改时,这些变化将在所有包含该对象的其它应用程序中体现。

嵌入对象保存在OLE应用程序中,其它应用程序不能访问该对象。只有在OLE应用程序中激活OLE对象才能对其进行编辑。嵌入的OLE对象不需要保存在文件中,所有数据都在应用程序中,这就确保了OLE数据不会被偶然地删除或修改。不足之处是应用程序的规模因为保存了OLE数据而增大了 。

如果用户想保存对嵌入对象的修改,可以把OLE数据存入文件中,本章第3 节将详细讨论这个问题。

表8.1 使用链接或嵌入的原则。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

何时使用链接         何时使用嵌入

───────────────────────────────

想要对源对象进行修改及将   对源对象进行修改,并将这

这些修改反映到其他与源对   些修改反映在一个特定的应

象链接的应用程序或文本中   用程序或文本中

源对象可能被多个OLE应    源对象不可能被一个OLE应

用程序应用程序频繁修改    用程序频繁修改

源对象的文件不会被频繁移   源对象的文件可能被频繁移

动,且不会被删除     动,且不会被删除    

对象很大,一般通过网络或   对象很小,或对象很大却无法

电子邮件进行分配       通过网络或电子邮件进行分配

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8.1.3 设计状态OLE对象的创建 

在Delphi中,可分别在设计状态或运行状态创建OLE对象,表8.2说明了两种状态创建对象的差别。 

表8.2 设计、运行状态OLE对象的创建

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

设计状态OLE对象的创建         运行状态OLE对象的创建

──────────────────────────────────────

对象保存在运行文件中,增加了所需 对象保存在一个文件中或只在运行时

编译的程序的规模       才有,减小了编译程序的规模 

开发者需在设计时访问OLE服务器   开发者不需要在设计时访问OLE服务器 

运行时OLE对象已经创建,减小了   运行时OLE对象已经创建,增加了运行

运行时间               时间 

OLE对象在设计运行时间可行性编辑   OLE对象只能在运行时编辑

应用程序的OLE对象数目在设计时已   应用程序可以在运行时创建新的OLE对

经确立                象

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

在设计状态,OLE服务器不能被本地激活,只能在自己的窗体内激活。但在运行状态,

只要OLE服务器支持本地激活,就可以使用这种方式。 

8.1.4 OLE类、文件、项目 

OLE类决定创建OLE对象的服务器。有些应用程序需要创建多种类型的OLE对象,例如应用程序同时链接或嵌入公式、图片等。OLE类也决定OLE对象所包含的数据类型,链接或嵌入对象均要定义OLE类。

OLE文件是包含OLE对象数据的源文件。链接对象必须使用对象文件,因为链接对象在文件中保存。如果应用程序从已存在的源文件中创建嵌入对象,也要使用OLE文件。例如,如果链接到QuattiPro笔记本的OLE对象TUTOR.WBI存储在D:\DFFICE\QPW目录下,则OLE文件就是D:\DFFICE\QPW\TUTOR.WBI。值得注意的是OLE文件只能为链接对象所定义,而对于嵌入对象,只需定义OLE类。

OLE项目是代表链接或嵌入数据的OLE文件中的一部分。当应用程序希望OLE对象包含比OLE文件小的数据块时,则必须使用OLE项目。

例如,在QuattiPro笔记本中,OLE对象链接了GasCosts的B4 到B5 范围的网格,OLE项目是$GasCosts;$B$4.$B$5。 

时间: 2024-10-30 22:27:39

第八章-对象链接与嵌入(一)(1)的相关文章

第八章-对象链接与嵌入(一)(4)

8.3.4.2 在剪贴板中使用OLE对象 要把OLE对象粘贴到OLE应用程序中,必须用Windows的 RegisterClipboardFormat函数为链连对象.嵌入对象注册两种新的剪贴板格式.这些格式将在BOLEFormat记录的fmtIdt域中被用到. 本章例程中, 程序在OnCreate事件中注册OLE对象的剪贴板格式,以下代码是主窗体的OnCreate事件: procedure TOLEFrameForm.FormCreate(Sender: TObject); begin FEmb

第八章-对象链接与嵌入(一)(2)

8.2 设计状态OLE对象的创建 Dephi可以在设计状态和运行状态中创建OLE对象.本节介绍设计状态OLE对象的创建. 8.2.1 TOLEContainer部件 要创建OLE对象,需在窗体中加入OLE包容器部件. 应用程序部件包含链接或嵌入的对象.用该部件可显示在OLE服务器编辑的数据.部件的ObjClass,ObjDoc,ObjItem 属性分别定义OLE类.文件.项目.要定义OLE对象是否本地激活,使用InPlaceActive 属性.如果OLE对象可以本地激活,OLE服务器菜单将与OL

第八章-对象链接与嵌入(二)(1)

8.3.5.2 在应用程序中释放OLE对象 当一个对象释放到一个窗体,该窗体发生OnDragDrop 事件.该对象定义为TDragDropEvent方法中的Source参数,而TDragDropEvent 方法是用来处理OnDragDrop事件". 如果Source 是一个OLE 对象, 那么它是TOLEDropNotify 对象的派生类型. TOLEDropNotify对象有一个与OLE包容器部件PInitInfo属性相对应的PIniInfo属性. 如果一个OLE对象被释放.PInitInfo

第八章-对象链接与嵌入(一)(3)

8.3.2.2 初始化OLE包容器部件 为了使OLE包容器部件包含OLE对象,必须对部件进行初始化. 初始化主要是定义部件的OLE类.如果定义了OLE文件和OLE项目,初始化完成后,OLE 应用程序部件将包含OLE对象. 调用InsertOLEObjetDlg函数可在其参数PInitInfo获得关于OLE对象初始化的信息时,把它传递给OLE包容器部件的PInitInfo属性,OLE包容部件的ObjClass,ObjDoc,ObjItem属性将被自动定义. 初始化完成后,OLE对象被击活.OLE服

第八章-对象链接与嵌入(二)(4)

8.4.3 自动化另一程序 每个服务器在系统注册中有一个叫ProgID的关键定,主要用以控制器辨识服务器.任何控制器可以用ProgID号来创建OLE对象实例.例程AutoForm是控制器程序,它在其主窗体创建了OLE对象实例. procedure TMainForm.FormCreate(Sender : TObject); begin try MemoEdit := CreateOleObject('MemoEdit.Application'); except MessageDlg( 'An

第八章-对象链接与嵌入(二)(3)

8.4.2 创建OLE自动化服务器 OLE自动化服务器是应用程序或动态链接库(DLL),它可向OLE 自动化控制器输出OLE对象. MemoEditdpr 就是OLE 自动化服务器, 在MemoAuto 单元中注册了MemoEdit.Appdication自动化类,所有OLE控制器均可对MemoEdit.Application进行引用. 在Windows环境下有两种OLE自动化服务器,进程内服务器和进程外服务器, Delphi可创建这两种服务器. 进程内服务器是输出OLE自动化对象的动态链接库.

第八章-对象链接与嵌入(二)(2)

8.4 OLE自动化 OLE自动化是Windows应用程序操纵另一个程序的一种机制.OLE 2.0提供了一种方法来集成应用程序,这就是应用程序之间的命令操作. 利用OLE 2.0,程序员可以定义一组命令,使它们进入到其它程序中.这些命令可带参数.看起来很象应用程序在调用函数或过程一样.采用上述办法, 可以在人不参与的情况下,就能使得两个应用程序的相互作用. 被自动化的程序称作自动化对象或自动化服务器, 操作或自动化其他程序的应用程序称为自动化控制器或自动化客户器. Delphi2.0完全支持OL

word2007链接或嵌入Excel工作表

  如果要在文档内容与 Microsoft Office Excel 工作簿的内容之间创建动态链接,则可以将内容作为对象插入.与粘贴内容(如通过按 Ctrl+V 粘贴)不同,将内容作为链接对象或嵌入对象插入时,您可在原始程序中处理内容. 如果将单元格作为 Excel 对象插入文档中,Microsoft Office Word 将在您双击单元格时运行 Excel,这样您就能使用 Excel 命令处理工作表内容. 如果将整个 Excel 工作表作为对象插入,文档中只会显示一个工作表.要显示不同的工作

word2007链接或嵌入 PowerPoint 幻灯片

  如果要在文档内容与 Microsoft Office PowerPoint 演示文稿的内容之间创建动态链接,则将内容作为对象插入.与粘贴内容(如通过按 Ctrl+V 粘贴)不同,将内容作为链接对象或嵌入对象插入时,您仍可在原始程序中处理内容. 如果将幻灯片作为 PowerPoint 对象插入文档中,Microsoft Office Word 将在您双击幻灯片时运行 PowerPoint,这样您就能使用 PowerPoint 命令处理幻灯片. 如果将整个 PowerPoint 演示文稿作为对象