您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 第八章对象链接与嵌入(一)
对象链接和嵌入(ObjectLinkingandEmbeding)是一组服务功能,它提供了一种用源于不同应用程序的信息创建复合文档的强有力方法。对象可以是几乎所有的信息类型,如文字、位图、矢量图形,甚至于声音注解和录像剪辑等。Windows附件组中的书写器是应用OLE的实例,使用单击“对象|插入”菜单项,书写器弹出插入对话框,对话框中列出了多个OLE服务器程序,如公式编辑工具,绘图工具,报表生成工具。用户双击鼠标左键,可激活一个OLE服务器。在OLE服务器中可编辑OLE对象,当用户返回到书写器中时,在书写器文档中将出现OLE对象。Delphi支持OLE技术,Delphi1.0可以创建OLE应用程序,Delphi2.0可创建OLE自动化服务器和控制器程序。本章通过例程介绍对象链接与嵌入的基本概念,Delphi创建OLE对象的方法,OLE自动化的概念以及如何开发OLE自动化服务器和控制器。8.1OLE简介8.1.1OLE1.0和OLE2.0迄今为止,有两种版本的OLE:OLE1.0和OLE2.0。当用户在OLE1.0服务器中激活OLE对象,服务器程序在前台打开自己的窗体,并获得焦点。OLE窗体失去焦点,存在于单独的窗体之中。OLE2.0服务器采用“本地”(inplace)激活方式。本地激活意味着服务器菜单与应用程序菜单要进行融合,服务器的状态条更换应用程序状态条,服务器的工具条更换应用程序工具条。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.4OLE类、文件、项目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。8.2设计状态OLE对象的创建Dephi可以在设计状态和运行状态中创建OLE对象。本节介绍设计状态OLE对象的创建。8.2.1TOLEContainer部件要创建OLE对象,需在窗体中加入OLE包容器部件。应用程序部件包含链接或嵌入的对象。用该部件可显示在OLE服务器编辑的数据。部件的ObjClass,ObjDoc,ObjItem属性分别定义OLE类、文件、项目。要定义OLE对象是否本地激活,使用InPlaceActive属性。如果OLE对象可以本地激活,OLE服务器菜单将与OLE应用程序的菜单进行融合,GroupIndex属性的值将决定菜单融合情况。8.2.2OLE对象创建的步骤:1.在窗体中增加OLE包容器部件;2.在Objectinspector中单击ObjClass或ObjDoc属性的省略按钮,将出现插入对象对话框;3.如果要插入的OLE对象已存储在文件中,选择“CreatFromFile”,而后定义该对象的文件名和路径名。如果是链接对象,则选择链接检查框。如果是嵌入对象,选择“Creatnew”,并在对象类型列表框中选择OLE对象;4.选择OK按钮;如果是创建新对象,OLE服务器将激活,则可对OLE对象进行编辑,完成编辑后关闭OLE服务器。典型的例子是单击服务器中的“File”或“File|Update”菜单。5.此时ObjClass属性中包含了相应的值,如果OLE对象从已存在的文件中创建或插入一个链接对象,ObjDoc属性包含了OLE文件。在设计对象状态时也可以粘贴OLE对象,其步骤如下:1.激活服务器应用程序,选择OLE包容器部件;2.在服务器中,将数据或对象拷贝到剪切板;3.进入Delphi集成开发环境,选择OLE包容器部件;4.在Objectinspector窗体中选择ObjItem属性的省略(…)按钮;5.在列表中选择OLE对象;6.选择“Paste创建一个嵌入对象或选择Pastelink创建链接对象;7.选择OK。OLE包容器部件在此时初始化。如果粘贴一个嵌入对象,ObjClass属性将包含适当的值。如果粘贴一链接对象,ObjClass,ObjDoc,ObjItem属性将全部定义。OLE应用程序部件包含代表OLE对象的图片。如果OLE服务器程序支持OLE对象的拖放功能,则在设计状态从服务器中拖动对象至应用程序,应用程序将创建链接对象,具体步骤:1.激活服务器,并Delphi集成开放环境中选择要链接的对象;2.按隹鼠标左键拖动OLE对象至设计状态的窗体;3.松开鼠键释放OLE对象。窗体将创建OLE应用程序并进行初始化。8.3OLE应用程序的开发Delphi可以在设计状态和运行状态创建OLE对象,上一节介绍的是在设计状态如何创建OLE对象,这一节将通过例程介绍如何在运行状态创建OLE对象、粘贴对象、拖动对象,以及OLE对象的文件操作。我们开发的OLE.dpr是一个OLE应用程序的实例8.3.1OLE应用程序界面开发OLE.dpr采用了多文档界面,父窗体有菜单,工具条,状态条,子窗体有一个OLE包容器部件,下面分别加以介绍。8.3.1.1OLE应用程序的菜单OLE应用程序的菜单与其它应用程序的主菜单大体一致,如果应用程序中有支持本地激活的OLE2.0对象,则要进行菜单融合。查阅OLE服务器的资料可知道服务器是否支持本地激活。OLE应用程序菜单的GroupIndex属性决定融合菜单的位置,即融合菜单是更换主菜单,还是插入至应用程序的主菜单中。OLE服务器,将融合三组菜单:Edit,View,Help,每组菜单分配了唯一的组索引值。在OLE应用程序中任何索引值为1,3,5的菜单组在菜单融合时被OLE服务器中具有相应索引值的菜单更换。在本例程中,编辑菜单项在菜单融合时被服务器的Edit替换。如图8.3。要想保存应用程序中的菜单,分配有异于1,3,5的索引值。表8.3融合后的菜单━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━菜单索引值功能描述来源(OLE激活时)────────────────────────────────文件0使用文件和退出程序OLE应用程序Edit1编辑OLE对象OLE服务器对象2操作未激活的OLE对象OLE应用程序View3修改OLE对象的观测方式OLE服务器窗体4操纵窗体OLE应用程序Help5访问服务器在线帮助OLE服务器━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━8.3.1.2OLE工具条和状态条当OLE对象被本地激活时,OLE服务器将试图用自己的工具条和状态条替换OLE应用程序的。如果应用程序想要本地激活,就应该在应用程序中编写相应的代码让服务器使用工具条和状态条。要做到这点,必须:●设置工具条和状态条●在应用程序中加入状态条通过修改面板部件的属性创建工具条和状态条。当OLE对象被本地激活时,面板或其他对齐控制将与OLE服务器程序进行协调。这意味OLE服务器可以替换OLE应用程序窗体中任何对齐控制,但锁定的控制不能被替换。例如,如果面板的align属性是alTop,alleft,alBottom,alIngh时,控制未锁定,OLE服务器可以替换。要使应用程序的工具条、状态条不被替换,可将locked属性设置成真值。当OLE对象被激活,OLE服务器在状态条中显示有关信息时,OLE应用程序部件的OnStatusLineEvent事件发生,一个文本字符会将从OLE服务器传至该事件句柄。OnStatusLineEvent事件句柄的MSG参数接受文本字符。以下代码用以状态条接收OLE服务器的信息:procedureTOLEObjectForm.OleContainerStatusLineEvent(Sender:TObject;Msg:String);beginOLEFrameForm.StatusBarPanel.Caption:=Msgend;8.3.2插入OLE对象运行状态时进行对象链接与插入也要用到插入对话框,Delphi中没有插入对话框部件,但可调用InsertOLEObjectDlg函数来显示对话框。8.3.2.1InsertOLEObjectDlg函数声明如下:functionInsertOleObjectDlg(Form:TForm;HelpCo
本文标题:第八章对象链接与嵌入(一)
链接地址:https://www.777doc.com/doc-2190857 .html