8.2 设计状态OLE对象的创建 Dephi可以在设计状态和运行状态中创建OLE对象。本节介绍设计状态OLE对象的创建。 8.2.1 TOLEContainer部件 要创建OLE对象,需在窗体中加入OLE包容器部件。 应用程序部件包含链接或嵌入的对象。用该部件可显示在OLE服务器编辑的数据。部件的ObjClass,ObjDoc,ObjItem 属性分别定义OLE类、文件、项目。要定义OLE对象是否本地激活,使用InPlaceActive 属性。如果OLE对象可以本地激活,OLE服务器菜单将与OLE应用程序的菜单进行融合,GroupIndex属性的值将决定菜单融合情况。 8.2.2 OLE对象创建的步骤: 1.在窗体中增加OLE包容器部件; 2.在Object inspector中单击ObjClass或ObjDoc属性的省略按钮,将出现插入对象对话框; 3.如果要插入的OLE 对象已存储在文件中,选择“Creat From File”,而后定义该对象的文件名和路径名。如果是链接对象,则选择链接检查框。 如果是嵌入对象,选择“Creat new”,并在对象类型列表框中选择OLE对象; 4.选择OK按钮; 如果是创建新对象,OLE服务器将激活,则可对OLE对象进行编辑,完成编辑后关闭OLE服务器。典型的例子是单击服务器中的“File”或“File|Update”菜单。 5.此时ObjClass属性中包含了相应的值,如果OLE对象从已存在的文件中创建或插入一 个链接对象,ObjDoc属性包含了OLE文件。 在设计对象状态时也可以粘贴OLE对象,其步骤如下: 1.激活服务器应用程序,选择OLE包容器部件; 2.在服务器中,将数据或对象拷贝到剪切板; 3.进入Delphi集成开发环境,选择OLE包容器部件; 4.在 Object inspector窗体中选择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.3 OLE应用程序的开发 Delphi可以在设计状态和运行状态创建OLE对象,上一节介绍的是在设计状态如何创建OLE对象,这一节将通过例程介绍如何在运行状态创建OLE对象、粘贴对象、拖动对象,以及OLE 对象的文件操作。我们开发的 OLE.dpr是一个OLE应用程序的实例 8.3.1 OLE应用程序界面开发 OLE.dpr采用了多文档界面,父窗体有菜单,工具条,状态条,子窗体有一个OLE包容器部件,下面分别加以介绍。 8.3.1.1 OLE应用程序的菜单 OLE应用程序的菜单与其它应用程序的主菜单大体一致,如果应用程序中有支持本地激活的OLE 2.0对象,则要进行菜单融合。查阅OLE 服务器的资料可知道服务器是否支持本地激活。 OLE应用程序菜单的GroupIndex属性决定融合菜单的位置,即融合菜单是更换主菜单,还是插入至应用程序的主菜单中。 OLE服务器,将融合三组菜单:Edit,View,Help,每组菜单分配了唯一的组索引值。在OLE应用程序中任何索引值为1,3,5的菜单组在菜单融合时被OLE服务器中具有相应索引值的菜 单更换。在本例程中,编辑菜单项在菜单融合时被服务器的"Edit"替换。如图8.3。 要想保存应用程序中的菜单,分配有异于1,3,5的索引值。 表8.3 融合后的菜单 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 菜单 索引值 功能描述 来源(OLE激活时) ──────────────────────────────── 文件 0 使用文件和退出程序 OLE应用程序 Edit 1 编辑OLE对象 OLE服务器 对象 2 操作未激活的OLE对象 OLE应用程序 View 3 修改OLE对象的观测方式 OLE服务器 窗体 4 操纵窗体 OLE应用程序 Help 5 访问服务器在线帮助 OLE服务器 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.1.2 OLE工具条和状态条 当OLE对象被本地激活时,OLE服务器将试图用自己的工具条和状态条替换OLE应用程序的。如果应用程序想要本地激活, 就应该在应用程序中编写相应的代码让服务器使用工具条和状态条。要做到这点,必须: ● 设置工具条和状态条 ● 在应用程序中加入状态条 通过修改面板部件的属性创建工具条和状态条。 当OLE对象被本地激活时,面板或其他对齐控制将与OLE服务器程序进行协调。 这意味 OLE服务器可以替换OLE应用程序窗体中任何对齐控制,但锁定的控制不能被替换。例如, 如果面板的 align属性是alTop,alleft,alBottom,alIngh时,控制未锁定,OLE服务器可以替换。要使应用程序的工具条、状态条不被替换,可将locked属性设置成真值。 当 OLE 对象被激活,OLE 服务器在状态条中显示有关信息时,OLE 应用程序部件的OnStatusLineEvent事件发生,一个文本字符会将从OLE服务器传至该事件句柄。 OnStatusLineEvent事件句柄的MSG参数接受文本字符。以下代码用以状态条接收OLE服务器的信息: procedure TOLEObjectForm.OleContainerStatusLineEvent(Sender: TObject; Msg: String); begin OLEFrameForm.StatusBarPanel.Caption := Msg end; 8.3.2 插入OLE对象 运行状态时进行对象链接与插入也要用到插入对话框,Delphi中没有插入对话框部件,但可调用InsertOLEObjectDlg 函数来显示对话框。 8.3.2.1 InsertOLEObjectDlg函数声明如下: function InsertOleObjectDlg(Form: TForm; HelpContext: THelpContext; var PInitInfo: Pointer): Boolean; 其中参数 Form是拥有插入对话框的窗体,一般将拥有OLE包容器部件的窗体名字传给Form.参数Helplontext为插入对象对话框定义在线帮助,如果应用程序没有在线帮助, HelpContext的值为零,对话框中将不出现帮助按钮。 参数PInitInfo是一个无类型指针,该指针指向一个包含初始化OLE 部件信息的内部数据结构。InsertOLEObjectDlg修改这个指针以指向一个有效的数据结构,该结构包含了对话框列表中被选择的OLE 对象初始化信息。当该指针被使用后,应调用ReleaseOLEInitInfo过程释放初始化信息所占用的内存。 当用户选择OK 按钮关闭插入对象对话框,InsertOLEObjectDlg 返回真值,并把 PInitInfo指向包含OLE对象的初始化信息的数据结构。  
2/2 首页 上一页 1 2 |