VFP用了OLE2.0技术,使VFP应用程序的适应能力大为加强。

VFP提供两种类型的OLE对象:一种是OLE控件(.OCX文件),这是一种自定义控件,通常在WINDOWS/SYSTEM目录下,拥有自己的事件、方法,类似于VFP的基本类,这种控件可以用VC、VB5.0、DeLphi、SDK2.0等编程工具开发。VFP缺省提供了四种可供使用的OLE控件,即通信(MSCOMM32.OCX)、消息应用程序接口MAPI(MSMAPI32.OCX)、OutLine(MSOUTL32.OCX)和图片裁剪(PICCLP32.OCX);另一种是可插入型OLE对象,这是由其他应用程序创建的,它们没有自己的事件集合。这一种可插入型OLE对象又可分为限制性可插入型OLE对象和非限制性可插入型OLE对象。

VFP提供两种引用OLE对象的途径都是通过VFP中的控件实现的:一种是通过OLE容器控件链接或嵌入对象,OLE容器控件可以引入OLE控件和非限制性可插入型OLE对象;另一种是通过OLE绑定型控件链接或嵌入数据表的通用类型字段中所存放的OLE对象,这通常是些限制性可插入型OLE对象。

在VFP中OLE对象是通过链接或嵌入操作方式进行操作的。链接和嵌入操作之间的区别在于OLE对象所存放的地点:链接操作中的OLE对象仍然存放在创建它的源文件中数据表或表单仅仅存储源文件的位置,即一个指针,在更改源文件时,被链接的OLE对象将被及时更新。被链接的OLE对象始终保持着与源文件之间的联系,除非人为断开这种联系;嵌入操作的OLE对象只能存储在数据表或表单中。这些OLE对象不与创建它的源文件保持联系。如果源文件做了更改,它们不会自动反映在VFP应用程序中,除非你再次进行嵌入操作。链接操作通常用于如下场合:OLE对象(数据或图形)可能被经常更改、应用程序必须包含最新版本的OLE对象、存放OLE对象的源文件可以在计算机之间或通过计算机网络进行更新、存放OLE对象的源文件必须被其他应用程序共享。嵌入操作通常用于如下场合:应用程序不需要具有最新版本的OLE对象、嵌入的OLE对象不需要被多个应用程序使用、源文件在被链接后不会被更新。

要注意的是VFP本身只是一个OLE客户机,而不是一个OLE服务器。

使用OLE对象

在应用程序中使用OLE对象首先要考虑OLE对象的类型,针对不同类型的OLE对象,使用不同的方法来引用它们。当程序中要引用的可插入型OLE对象较多时就要考虑用数据表的通用型字段来存储它。

1、在VFP的数据表中添加OLE对象方法一:使用数据表设计器给数据表添加一个通用型字段,然后将可插入型OLE对象链接或嵌入到通用型字段的每个记录中。通用字段包含一个10字节的指针,它指向该字段真正的内容,通用型字段的真正类型和数据大小取决于创建这些对象的OLE服务器。这些OLE对象是以链接方式还是以嵌入方式进行操作与该应用程序有关。若OLE对象是以链接方式进行操作的,则数据表中只含有对OLE对象的引用,以及创建这些OLE对象的应用程序的引用;若OLE对象是以嵌入方式进行操作的,数据表中将含有相关OLE对象的副本,以及对创建这些OLE对象的应用程序的引用。通用字段的大小仅受可用磁盘空间的限制。

方法二:使用APPENDGENERAL命令从文件中导入OLE对象并将其放入通用型字段中。语法:

APPENDGENERALGeneraLFieLdName

[FROMFiLeName FROMMEMOPictureFieLd�Name]

[DATAcExpression]

[LINK]

[CLASSOLECLassName]

2、使用限制性可插入型OLE对象

使用通用型字段中所存储的限制性可插入型OLE对象需要使用OLE绑定型控件,步骤如下:

(1)在表单设计器中,将一个OLE绑定型控件添加到表单中。

(2)通过设置对象的ControLSource属性指定包含OLE对象的通用型字段。如果数据表名为Inventory,通用型字段名为Current,那么可以将ControL�Source属性设置成Inventory.Current。

(3)在表单上添加按钮或菜单命令,用以浏览ControLSource属性指定的通用型字段。

3、使用OLE控件(.OCX文件)及非限制性可插入型OLE对象

这两类对象需要使用OLE容器控件。OLE容器控件允许向应用程序中加入OLE对象,包括OLE控件(.OCX文件)、非限制性可插入型OLE对象。OLE容器控件与OLE绑定型控件不同在于,它不与VFP表的一个通用型字段相连接。

若要在表单中添加OLE控件及非限制性可插入型OLE对象可按如下步骤进行:

(1)在表单设计器中,向表单中添加一个OLE容器控件。

(2)在“InsertObject”对话框中,选择“CreateNew”或“CreatefromFiLe”或“InsertControL”选项。

(3)从显示的列表中选择适当的OLE控件或创建适当类型的对象或增加一个嵌入文件。

在插入控件时如果所要的控件没有出现在列表中,可选择“AddControL”按钮将其添加到列表中。也可以通过将OLE控件添加到表单控件工具栏中而将其添加到表单中。在选项对话框中选择控件之后,单击表单控件工具栏上的“ViewCLass”按钮,从子菜单中选择“OLEControL”,单击OLE,然后拖动控件,在表单上设置其大小。下面以一例子说明如何在程序中使用非限制性可插入型OLE对象,本例首先将一个OLE容器控件加入表单,然后使用OLE容器控件的OLECLass和DocumentFiLe属性将MicrosoftExceL作为OLE服务器,并将一个ExceL工作簿指定为要编辑的文件。DocumentFiLe属性指定了在C驱动器中ExceL路径下一个名为BOOK1.XLS的工作簿。如果在DocumentFiLe属性中指定的文件或路径不存在,则本例程不能正常运行,这时需要修改DocumentFiLe来指明一个存在的路径和工作簿文件。另外BOOK1.XLS只能读不能修改,下面是其VFP源代码及其说明。

frmMyForm=CREATEOBJECT(′Form′)&&创建表单

frmMyForm.CLosabLe=.F.&&废止控制菜单框

frmMyForm.AddObject(′cmdCommand1′,′cmdMyCmdBtn′)

frmMyForm.AddObject(″oLeObject″,″oLeEx�ceLObject″)

frmMyForm.cmdCommand1.VisibLe=.T.

frmMyForm.oLeObject.VisibLe=.T.

frmMyForm.oLeObject.Height=50

frmMyForm.Show

frmMyForm.oLeObject.DoVerb(-1)

READEVENTS

DEFINECLASSoLeExceLObjectasOLEControL

OLeCLass=″ExceL.Sheet″

DocumentFiLe=″C:/EXCEL/BOOK1.XLS″

ENDDEFINE

DEFINECLASScmdMyCmdBtnASCommand�Button

Caption=′/

CanceL=.T.

Left=125

Top=210

Height=25

PROCEDURECLick

CLEAREVENTS

ENDDEFINE

4、使用OLE对象的属性

OLE对象有一系列属性可供使用,但是对包含在OLE容器控件中的OLE对象,要确保引用的是OLE对象的属性而不是其容器的属性,这需要将容器的Ob�ject属性加到OLE对象名当中。

5、使用OLE对象的方法

除了设置和读取OLE对象的属性外,还可以使用OLE对象的方法来操作OLE对象。例如,下面的程序使用了Ex�ceL对象的Add方法来创建ExceL工作簿,然后使用Save方法保存该工作簿,并使用Quit方法结束ExceL的本次运行:

oLeApp=CREATEOBJECT("Ex�ceL.AppLication")

oLeApp.VisibLe=.T.

oLeApp.Workbooks.Add

oLeApp.CeLLs(1,1).VaLue=7

oLeApp.ActiveWorkbook.SaveAs("C:/TEMP.XLS")

oLeApp.Quit

与使用属性一样,如果用容器控件创建对象,应确保将“Object”加到引用对象方法的控件名称当中。

6、访问集合中的OLE对象

一个对象类型可以代表单个对象或若干相关对象的集合。

在程序中,集合是一个未经排序的链表结构,每当有对象被添加到集合中或从集合中移去时,其余对象的位置都可能改变。使用集合的Count属性对集合遍历,可以访问集合中的所有对象。Count属性可用来返回集合中项的数目。另外,可以使用Item方法返回集合中的某一项。

也可以访问集合内的集合。例如,使用下列程序代码可以在一个单元格区域内访问某一单元格集合:

oLeApp=CREATEOBJECT("ExceL.sheet")

oLeApp.Range(oLeApp.CeLLs(1,1),oLeApp.CeLLs(10,10)).VaLue=100

7、使用OLE对象的数组利用OLE技术,不但可以将数组传递给OLE对象的方法,而且可以接收OLE对象传来的数组。传递数组的方式必须是按引用传递,即必须在数组名前加@符号(用VFP不能将二维以上的数组传递到OLE对象中)。例如,要发送一个VFP数组到ExceL中,可以使用以下程序代码。它先在VFP中创建一个数组,给数组赋一些值,然后启动ExceL,创建一个工作簿,并给工作表的第一个单元格设置一个初始值,再将此值复制到数组中的其他工作表中:其中用到了ExceL的工作簿集(Workbooks对象),工作表集(Sheets对象)的相关属性及方法和ExceL对象的GetCustomListContents方法。下列代码将数组传递给方法FiLLAcrossSheets,以便将Sheet1中的第一区域内容复制到其它工作表的相同区域。

DIMENSIONaV(2)

aV(1)=″Sheet1″

aV(2)=″Sheet2″

oLeApp=CREATEOBJECT(″Ex�ceL.AppLication″)

oLeApp.Workbooks.Add

oLeI=oLeApp.Workbooks.Item(1)

oLeI.Sheets.Item(1).CeLLs(1,1).VaLue=100&&初始值

oLeI.Sheets(@aV).FiLLAcrossSheets(oLeI.Worksheets(″Sheet1″).CeLLs(1,1))

oLeApp.VisibLe=.T.

下列代码将一个数组返回到VFP,并显示数组的内容:

oLeApp=CREATEOBJECT(″Ex�ceL.AppLication″)

aOLeArray=oLeApp.GetCustomListContents(1)&&改变数组下标可以显示其它内容

FORnIndex=1toALEN(aOLeArray)

?aOLeArray(nIndex)

ENDFOR

[VFP实例]VFP的OLE技术应用详解相关推荐

  1. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. Android网络开发技术实战详解

    <Android网络开发技术实战详解> 基本信息 作者: 朱桂英 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121173493 上架时间:2012 ...

  3. 知识图谱技术发展详解(一)

    一.万维网现状 1.当前的Web是一种面向人的网络,很多繁琐的过程依旧需要人工的参与. 2.以搜索引擎为例,目前的搜索引擎主要依靠关键字匹配,因此存在如下问题: (1)高匹配.低精度,搜索出来的内容中 ...

  4. Web端即时通讯技术原理详解

    Web端即时通讯技术原理详解 前言 在web端的IM即时通讯应用,由于浏览器的兼容性以及其固有的"客户端请求服务器处理并响应"的C/S通信模型,造成了要在浏览器中实现一个兼容性较好 ...

  5. 【干货】PMcaff干货课程学习精彩分享:Apple Watch 技术特性详解

    昨天PMcaff给大家推荐了Apple Watch的发布会,好多小伙伴们在后台留言,所以PMcaff小咖今天给大家找来一篇干货,看完感觉还不错,在这里分享给大家. 作为苹果主推的智能穿戴产品,Appl ...

  6. nmos导通流向_技术参数详解,MOS管知识最全收录!

    原标题:技术参数详解,MOS管知识最全收录! MOS管,即金属(Metal)-氧化物(Oxide)-半导体(Semiconductor)场效应晶体管,是一种应用场效应原理工作的半导体器件:和普通双极型 ...

  7. 计算机三级网络技术知识点cn,计算机等级三级网络技术考试详解

    首页 > 办公休闲手游 计算机等级三级网络技术考试详解 一.基本知识 1.具有计算机软件及 应用的基本知识 2.掌握操作系统的基 本知识 3.掌握计算机网络的基本概念与基 本工作原理 4.掌握I ...

  8. 交换机最多可以接几个_【技术】详解一个交换机能带动多少个网络监控摄像头?...

    原标题:[技术]详解一个交换机能带动多少个网络监控摄像头? 一个交换机能带动多少个网络监控摄像头?千兆交换机一般接200万网络摄像机能接几个?24个网络头,用一台24口百兆交换机行不行?下面就这类问题 ...

  9. GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解

    GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解 GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解 主时钟(北斗二代卫星同步时钟,GPS北斗双模时钟服务器,GPS时间同步系统)是我司开 ...

最新文章

  1. VS2008中Web Reference和Service Reference的区别
  2. shell中遍历目录
  3. python【力扣LeetCode算法题库】1162- 地图分析(BFS)
  4. 创建ListView的基本步骤
  5. Delphi-IOCP学习笔记三====工作线程和Listener
  6. Silverlight之工具箱使用1
  7. Bootstrap 媒体对象
  8. CentOS 7中源码安装MySQL 5.7.16 ----已测试验证
  9. Atlassian JIRA 插件开发之三 创建
  10. java 通过身份证判断性别
  11. 华为p4支持鸿蒙功能吗_华为P40或用鸿蒙 鸿蒙系统支持哪些手机 鸿蒙系统什么时候能用...
  12. 连续支付(周期扣款)功能开发及注意事项
  13. 机器学习中使用的神经网络(六) --第二课
  14. arrayToJson将数组转化为json格式的js代码
  15. opencv 中函数的一相关说明,如:cvtColor和cvCvtColor区别
  16. Roblox入场教育游戏,是换道拥抱元宇宙还是新瓶装旧酒?
  17. 6.5 【加密和安全】- 重合指数 无线网络
  18. S60V3是什么意思?
  19. 【答题卡识别】Hough变换答题卡识别【含Matlab源码 250期】
  20. mysql创建表显示1005_创建表上的MySQL错误1005

热门文章

  1. 如何批量删除Excel空行
  2. 使用OPC DA接口将robotdtudio与西门子sim进行仿真连接
  3. 神经科学探索脑第二章答案
  4. 机床设备液压系统比例放大器|压铸设备液压系统比例阀控制器
  5. MATLAB绘制xyz的分段函数,matlab绘制分段函数
  6. Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词
  7. libVLC 视频缩放
  8. practical perforce
  9. 华为云ECS,如何助力数字化企业创新发展
  10. s5p4418的uboot开通网络支持