fmtName表示是对象的名字用以定义出现在粘贴对话框中列表框 内的对象名称在例程中把%S匹配给fmtNameOLE服务器自动地把格式化的名字代替%S参数例如如果OLE服务器是画笔在程序运行时Paintbrush Picture Object将代替%S
fmtResultName定义出现在粘贴对话框中结果检查框内的名字在例程中 把%S传给了fmtResultNameOLE服务器自动地把格式结果名称代替%S参数例如如果OLE服务器是画笔程序运行时Paintbrush Picture将代替%S
fmtMedium是BOLEMedium类型是Windows决定对象格式的数据类型例如OLE 联
接对象的格式是BOLE_MED_STREAMOLE嵌入对象的格式是BOLE_MED_STORAGEBOLEMedium函数可计算出需要的BOLEMedium类型
fmtIsLinkale决定对象格式是否可联连联连对象的fmtIsLinkable为真值嵌入对象的fmtIsLinkable为假值
参数HelpContext 为粘贴对话框定义在线帮助如果应用程序没有在线帮助HelpContext的值为零对话框中将不出现帮助按钮
参数Form用以定义剪粘板上的格式是由PasteSpecialDlg函数进行修改因为使用粘贴对话框时应用程序并不知道剪贴板的格式因而用Format来处理剪贴板的数据在本章例程中 PasteSpecialDlg 函数把format 变量修改成FEmbedClipFmt 或FLinkClipFmt格式这两种格式是在主窗体的OnCreate事件中定义的如果剪贴板上的数据不是OLE对象Format将被修改成其它类型的格式如CF_TEXT等
参数Landle定义剪贴板上的数据句柄由PasteSpecialDlg函数进行修改 当剪贴板的数据类型不是OLE对象时需用Handle参数访问剪贴板数据Handle是句柄类型
参数PInitInfo是一个指向OLE对象初始化结构的指针前面在讲述初始化OLE应用程序部件时也用到了这种指针PasteSpecialDlg函数将修改PInitInfo指针以使其指向一个有效的数据结构该结构包括了粘贴对话框中被选中的OLE对象的初始化信息
下面介绍粘贴对话框中的部件
● 将剪贴板上的数据插入OLE应用程序以实现对象嵌入须选择Paste;
● 在OLE服务器资源文件与OLE应用程序之间建立联连以实现对象联连须选择 Paste Line;
● 要将闻连与嵌入的对象显示成图标选择Display As Icon若这个检查框被选中改变图标(Chang Icon)按钮将显示通过这个按钮可改变OLE对象的缺省图标或标签
● 如果数据不是注册的格式PastePaste link选择键将变灰 用户无法从剪贴板上粘贴数据在本章例程中剪贴板上的数据只能是FEmbedClipFmt(嵌入对象) 和FlinkClipFmt(链接对象)
● 用户在列表框中选择数据类型有时数据被解释成多种类型例如在包含OLE服务器功能的字处理器中把文本复制到剪贴板中应用程序可以以文本和OLE对象两种方式粘贴对象列表框中出现的选择项由OLE服务器决定
用户在粘贴对话框中选择OK按钮PasteSpecialDlg返回真值关于OLE 应用程序的初始化信息贮存在PInitInfo所指向的结构中
在剪贴板中使用OLE对象
要把OLE对象粘贴到OLE应用程序中必须用Windows的 RegisterClipboardFormat函数为链连对象嵌入对象注册两种新的剪贴板格式这些格式将在BOLEFormat记录的fmtIdt域中被用到
本章例程中 程序在OnCreate事件中注册OLE对象的剪贴板格式以下代码是主窗体的OnCreate事件
procedure TOLEFrameFormFormCreate(Sender: TObject)
begin
FEmbedClipFmt := RegisterClipboardFormat(Embedded Object)
FLinkClipFmt := RegisterClipboardFormat(Link Source)
Fmts[]fmtId := FEmbedClipFmt;
Fmts[]fmtMedium := BOLEMediumCalc(FEmbedClipFmt)
Fmts[]fmtIsLinkable := False;
StrPCopy(Fmts[]fmtName %s)
StrPCopy(Fmts[]fmtResultName %s)
Fmts[]fmtId := FLinkClipFmt;
Fmts[]fmtMedium := BOLEMediumCalc(FLinkClipFmt)
Fmts[]fmtIsLinkable := True;
StrPCopy(Fmts[]fmtName %s)
StrPCopy(Fmts[]fmtResultName %s)
RegisterFormAsOleDropTarget(Self Fmts)
end;
程序传给RegistClipBroardFormat函数一个描述格式的参数它返回一个Word类型的值该值能唯一的辨识新注册的格式FEmbdeClipFmtFlinkClipFmt 是TOLEFormat类的私有数据成员 声明如下
TYPE
TOLEForaneForm = Class(TForm)
…
private
FEmbedClipFmt: Word;
FLinkClipFmt: Word;
function CreateChild: TOLEObjectForm;
public
Fmts: array[] of BOleFormat;
end;
在注册剪贴板格式后 还必须定义OLE 格式才能进行对象粘贴 每种格式定义在BOLEFormat记录中 程序中可能注册标准剪贴板格式并用这种格式进行粘贴例如注册文本作为粘贴格式将BOLEFormat记录为fmtId域定义为CF_TEXTfmt Medium 域定义为BOLE_MED_HGLOBOL BOLEMediumCalc 函数可以根据定义的剪贴板格式计算出fmtMedium值在本章例程中程序注册了两种格式一种是链接OLE对象的格式另一种是嵌入OLE对象的格式
[] [] [] [] []