其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:对象链接与嵌入(一)[3]


发布日期:2023年08月17日
 
DELPHI基础教程:对象链接与嵌入(一)[3]

以下代码用以状态条接收OLE服务器的信息

procedure TOLEObjectFormOleContainerStatusLineEvent(Sender: TObject;

Msg: String)

begin

OLEFrameFormStatusBarPanelCaption := Msg

end;

插入OLE对象

运行状态时进行对象链接与插入也要用到插入对话框Delphi中没有插入对话框部件但可调用InsertOLEObjectDlg 函数来显示对话框

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对象的初始化信息的数据结构

初始化OLE包容器部件

为了使OLE包容器部件包含OLE对象必须对部件进行初始化 初始化主要是定义部件的OLE类如果定义了OLE文件和OLE项目初始化完成后OLE 应用程序部件将包含OLE对象

调用InsertOLEObjetDlg函数可在其参数PInitInfo获得关于OLE对象初始化的信息时把它传递给OLE包容器部件的PInitInfo属性OLE包容部件的ObjClassObjDocObjItem属性将被自动定义

初始化完成后OLE对象被击活OLE服务器将获得控制用户可通过OLE服务器对OLE对象进行编辑当程序冻结OLE对象OLE包容器部件将包含一幅图像或位图代表OLE对象定义OLE包容器部件的AutoActive属性可重新激活OLE对象缺省情况下双击OLE包容器部件可击活OLE对象

例程中初始OLE对象的代码如下

procedure TOLEObjectFormInitializeOLEObject(Info: Pointer)

begin

OLEContainerPInitInfo := Info;

ReleaseOLEInitInfo(Info)

end;

该过程先将初始化指针传给OLE包容器部件的PInitInfo属性而后释放其内存空间

当用户单击例程中的编辑 | 插入菜单项将弹出插入对象对话框选择对象类型后 OLE对象被激活该过程的代码如下

procedure TOLEObjectFormInsertObjectClick(Sender: TObject)

var

Info: Pointer;

begin

if InsertOLEObjectDlg(OLEFrameForm Info) then

InitializeOLEObject(Info)

end;

冻结OLE对象

如果OLE对象是OLE 服务器创建对象将在OLE服务器中被击活焦点和控制移到OLE服务器中要冻结一个由OLE 创建的对象选择File | Exit菜单项

如果OLE 服务器支持本地激活激活OLE对象后OLE服务器将进行菜单融合并转换工具条和状态条要冻结对象只需在应用程序窗体中异于OLE包容器部件的任何地方单击鼠

标键即可

另一种冻结对象的方法是把OLE包容器部件的Active属性设置成假值在例程中对象|冻结菜单项实现冻结功能代码如下

procedure TOLEObjectFormDeactivateClick(Sender: TObject)

begin

OLEContainerActive := False

end;

粘贴OLE对象

一些OLE服务器允许用户把OLE对象复制到剪贴板如果一个OLE对象复制到剪贴板上OLE应用程序可通过初始化OLE包容器部件来粘贴OLE对象

粘贴对话框

把OLE对象粘贴到OLE包容器部件要使用粘贴对话框Delphi 中没有粘贴对话框部件但可用PasteSpecialDlg函数显示粘贴对话框

PasteSpecialDlg 函数声明如下

function PasteSpecialDlg(Form :TForm;Const First:arrang; HelpConcert: THelpCOntext;var Forrmat : Word; var Hardle : THanlle var PInitInfo :Point ) : Boolean;

PasteSpecialDlg参数定义如下

参数Form是拥有粘贴对话框的窗体应把包含OLE包容器部件的窗体名字传递给Form

参数Format是注册对象格式的数组每组格式是BOLEFormat类型的数组成员例如应用程序可注册两种对象格式为嵌入对象注册FEmbedClipFmt 为链接对象注册FlinkClipFmt

BOLEFormat 声明如下

BOLEFormat: Record

fmtID : Word;

fmtName : array[] of char;

fmtResultName : array[] of char;

fmtMediun : BOleMedium;

fmIsLInkble : Bool;

end;

fmtID是对象的剪贴板格式ID号fmtID 可以是标准的剪贴板格式CF_TEXTCF_BIFMAP使用OLE 对象时 需注册新的剪贴板格式来处理OLE 对象Windows的API中 的RegisterClipbordFormat函数注册格式

[] [] [] [] []

               

上一篇:DELPHI基础教程:对象链接与嵌入(一)[4]

下一篇:DELPHI基础教程:对象链接与嵌入(一)[2]