BOLEFormat类型定义在BOLEDefs单元中,BOLEMediumCalc函数定义在ToCtrl单元。因此主窗中的interface部分应加入这两个单元。
interface
use…,BOLEDefs,ToCtrl,
在粘贴
OLE对象前,应用程序必须知道在剪贴板中是否有OLE对象。PasteSpecialEnabled函数可判断粘贴对话框是否有效。如果剪贴板上有Fmts定义的任何一种格式,PasteSpecialEnable将返回真值, 粘贴对话框才能成功地调用。反之调用粘贴对话框将不发生任何事件。
以下代码实现“编辑
|粘贴”菜单项的功能:procedure TOLEObjectForm.PasteSpecial1Click(Sender: TObject);
var
ClipFmt: Word;
DataHand: THandle;
Info: Pointer;
begin
if PasteSpecialEnabled(Self, OLEFrameForm.Fmts) then
if PasteSpecialDlg(Self, OLEFrameForm.Fmts, 0,
ClipFmt, DataHand, Info) then
InitializeOLEObject(Info)
end;
只有在粘贴对话框有效时“编辑|粘贴”菜单才有效,以下代码实现此功能:
procedure TOLEObjectForm.Edit1Click(Sender: TObject);
begin
PasteSpecial1.Enabled := PasteSpecialEnabled(Self, OLEFrameForm.Fmts)
end;
8.3.5 释放OLE对象
从OLE服务器拖动OLE对象并将其放在OLE应用程序是一种方便的对象链接与嵌入的方法。通过拖放操作,用户不需要使用插入对话框或粘贴对话框来定义OLE对象。而只需用鼠标键从OLE服务器中“抓”住OLE对象,拖至OLE应用程序,松开鼠标键,从而实现OLE对象的插入。
8.3.5.1 注册OLE释放目标窗体
为了接收一个释放的OLE对象,必须有一个窗体在Windows中注册成OLE释放目标,用RegisterFormASOLEDropTarget函数可实现此功能。
RegisterFormASOLEDropTarger(Form : TFrom;Const Fmts: array of BOlefrom).
其中
Form是OLE对象的释放目标窗体,在本章例程中,将子窗体传递给Form参数。Fmts是对象格式的数组。它是BOLEFormat 类型的数组。 所有要释放的数据必须用Fmts数组中相应BOLEFormat元素注册。
在本章例程中,注册的
Fmts 数组与主窗体OnCreate事件 声明的数组相同, 即:联接对象格式和嵌入对象格式。如果想接收更多类型的释放数据,就必须在Fmts数组中加入其它元素。例如应用程序要接收释放的文本,Fmts需加第三个元素, 其fmtId 域为CF_TEXT,BOLEMedium域为BOLE_MED_HGLOBL.拖放过程中不需要用BOLEFormat的fmtName,fmtResultName域,如果程序只进行拖放操作而不进行对象粘贴,可以不初始化两个域。
在主窗体的
OnCreate事件中可调用RegisterFormAsOLEDropTorget。procedure TOLEFrameForm,FormCreate(Sender : TObject);
begin…
Register FormASOleDropTarget(Self,Fmts)
end;
上一篇: Delphi 对象链接与嵌入(三)
下一篇: Delphi 对象链接与嵌入(四)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




