BOLEFormat类型定义在BOLEDefs单元中 BOLEMediumCalc函数定义在ToCtrl单元 因此主窗中的interface部分应加入这两个单元
interface
use… BOLEDefs ToCtrl
在粘贴OLE对象前 应用程序必须知道在剪贴板中是否有OLE对象
PasteSpecialEnabled函数可判断粘贴对话框是否有效 如果剪贴板上有Fmts定义的任何一种格式 PasteSpecialEnable将返回真值 粘贴对话框才能成功地调用 反之调用粘贴对话框将不发生任何事件
以下代码实现 编辑|粘贴 菜单项的功能
procedure TOLEObjectForm PasteSpecial Click(Sender: TObject)
var
ClipFmt: Word;
DataHand: THandle;
Info: Pointer;
begin
if PasteSpecialEnabled(Self OLEFrameForm Fmts) then
if PasteSpecialDlg(Self OLEFrameForm Fmts
ClipFmt DataHand Info) then
InitializeOLEObject(Info)
end;
只有在粘贴对话框有效时 编辑|粘贴 菜单才有效 以下代码实现此功能
procedure TOLEObjectForm Edit Click(Sender: TObject)
begin
PasteSpecial Enabled := PasteSpecialEnabled(Self OLEFrameForm Fmts)
end;
释放OLE对象
从OLE服务器拖动OLE对象并将其放在OLE应用程序是一种方便的对象链接与嵌入的方法 通过拖放 *** 作 用户不需要使用插入对话框或粘贴对话框来定义OLE对象 而只需用鼠标键从OLE服务器中 抓 住OLE对象 拖至OLE应用程序 松开鼠标键 从而实现OLE对象的插入
注册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事件中可调用RegisterFormAsOLEDropTet
procedure TOLEFrameForm FormCreate(Sender : TObject)
begin…
Register FormASOleDropTarget(Self Fmts)
end;
返回目录 DELPHI基础教程
编辑推荐
Java程序设计培训视频教程
J EE高级框架实战培训视频教程
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLE G数据库开发优化指南
Java程序性能优化 让你的Java程序更快 更稳定
C嵌入式编程设计模式
Android游戏开发实践指南
lishixinzhi/Article/program/Delphi/201311/25223
对象链接和嵌入(Object Linking and Embeding)是一组服务功能 它提供了一种用源于不同应用程序的信息创建复合文档的强有力方法 对象可以是几乎所有的信息类型 如文字 位图 矢量图形 甚至于声音注解和录像剪辑等
Windows附件组中的书写器是应用OLE的实例 使用单击 对象 | 插入 菜单项 书写器d出插入对话框 对话框中列出了多个OLE服务器程序 如公式编辑工具 绘图工具 报表生成工具 用户双击鼠标左键 可激活一个OLE服务器 在OLE服务器中可编辑OLE对象 当用户返回到书写器中时 在书写器文档中将出现OLE对象
Delphi支持OLE技术 Delphi 可以创建OLE应用程序 Delphi 可创建OLE自动化服务器和控制器程序 本章通过例程介绍对象链接与嵌入的基本概念 Delphi创建OLE对象的方法 OLE自动化的概念以及如何开发OLE自动化服务器和控制器
OLE简介
OLE 和OLE
迄今为止 有两种版本的OLE:OLE 和OLE 当用户在OLE 服务器中激活OLE对象 服务器程序在前台打开自己的窗体 并获得焦点 OLE窗体失去焦点 存在于单独的窗体之中
OLE 服务器采用 本地 (in place)激活方式 本地激活意味着服务器菜单与应用程序菜单要进行融合 服务器的状态条更换应用程序状态条 服务器的工具条更换应用程序工具条 OLE对象在应用程序窗体中进行编辑 但所有过程均由服务器处理
创建OLE对象的服务器决定了OLE的激活方式 如果一个OLE 的对象在OLE 编译的应用程序中打开 它将采用OLE 的方式
链接与嵌入
链接对象的数据保存在OLE服务器创建的文件中 嵌入对象的数据保存在OLE应用程序中
链接对象必须以文件形式保存 只有对OLE服务器已经创建好的OLE对象 才能进行OLE链接 链接的OLE对象文件可被OLE应用程序或其它程序进行修改 OLE 服务器和其它OLE应用程序也可以访问和修改OLE对象 对象数据保存在某一处 但可以被多个应用程序访问
Delphi应用程序可以得到OLE对象文件中的最新数据 当OLE 对象数据被应用程序修改时 这些变化将在所有包含该对象的其它应用程序中体现
嵌入对象保存在OLE应用程序中 其它应用程序不能访问该对象 只有在OLE应用程序中激活OLE对象才能对其进行编辑 嵌入的OLE对象不需要保存在文件中 所有数据都在应用程序中 这就确保了OLE数据不会被偶然地删除或修改 不足之处是应用程序的规模因为保存了OLE数据而增大了
如果用户想保存对嵌入对象的修改 可以把OLE数据存入文件中 本章第 节将详细讨论这个问题
使用链接或嵌入的原则
想要对源对象进行修改及将这些修改反映到其他与源对象链接的应用程序或文本中 源对象可能被多个OLE应用程序应用程序频繁修改 源对象的文件不会被频繁移动 且不会被删除
对象很大 一般通过网络或电子邮件进行分配
对源对象进行修改 并将这些修改反映在一个特定的应用程序或文本中 源对象不可能被一个OLE应用程序频繁修改 源对象的文件可能被频繁移动 且不会被删除
对象很小 或对象很大却无法通过网络或电子邮件进行分配
设计状态OLE对象的创建
在Delphi中 可分别在设计状态或运行状态创建OLE对象 表 说明了两种状态创建对象的差别
设计 运行状态OLE对象的创建
对象保存在运行文件中 增加了所需编译的程序的规模 开发者需在设计时访问OLE服务器运行时OLE对象已经创建 减小了运行时间 OLE对象在设计运行时间可行性编辑应用程序的OLE对象数目在设计时已经确立
对象保存在一个文件中或只在运行时才有 减小了编译程序的规模 开发者不需要在设计时访问OLE服务器运行时OLE对象已经创建 增加了运行时间 OLE对象只能在运行时编辑 应用程序可以在运行时创建新的OLE对象在设计状态 OLE服务器不能被本地激活 只能在自己的窗体内激活 但在运行状态
只要OLE服务器支持本地激活 就可以使用这种方式
OLE类 文件 项目
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的B 到B 范围的网格 OLE项目是$GasCosts;$B$ $B$
设计状态OLE对象的创建
Dephi可以在设计状态和运行状态中创建OLE对象 本节介绍设计状态OLE对象的创建
TOLEContainer部件
要创建OLE对象 需在窗体中加入OLE包容器部件 应用程序部件包含链接或嵌入的对象 用该部件可显示在OLE服务器编辑的数据 部件的ObjClass ObjDoc ObjItem 属性分别定义OLE类 文件 项目 要定义OLE对象是否本地激活 使用InPlaceActive 属性 如果OLE对象可以本地激活 OLE服务器菜单将与OLE应用程序的菜单进行融合 GroupIndex属性的值将决定菜单融合情况
OLE对象创建的步骤
在窗体中增加OLE包容器部件
在Object inspector中单击ObjClass或ObjDoc属性的省略按钮 将出现插入对象对话框
如果要插入的OLE 对象已存储在文件中 选择 Creat From File 而后定义该对象的文件名和路径名 如果是链接对象 则选择链接检查框 如果是嵌入对象 选择 Creat new 并在对象类型列表框中选择OLE对象
选择OK按钮
如果是创建新对象 OLE服务器将激活 则可对OLE对象进行编辑 完成编辑后关闭OLE服务器 典型的例子是单击服务器中的 File 或 File|Update 菜单
此时ObjClass属性中包含了相应的值 如果OLE对象从已存在的文件中创建或插入一
个链接对象 ObjDoc属性包含了OLE文件
lishixinzhi/Article/program/Delphi/201311/252191、展开服务器对象-->链接服务器-->右击"新建链接服务器"
2、输入链接服务器的IP或者输入域名(域名会更方便一些,可以更换服务器IP地址)
3、设置链接服务器的安全性(登录的用户名和密码)
4、创建成功后就可以看到了,
5、现在就可以使用链接服务器了,用本地登录SqlServer,新建一个查询,输入
6、Select From [链接服务器名][远程数据库名][所有者][表名]
7、比如 Select from [3GXXXXNET][cntvs][dbo][tbUsers]
8、如果可以查询到数据说明一切正常喽
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)