----DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用程序发送一条消息请求信息,服务器应用程序根据该信息作出应答,从而实现两个程序之间的数据交换。在Visual FoxPro中,一共十一个常用的DDE函数,它们是:
DDEAbortTrans() 删除异步的DDE处理
DDEAdvise() 建立与服务器应用程序的温或热连接
DDEEnabled() 设置或返回DDE状态
DDEExecute() 向服务器应用程序发送一条执行消息
DDEInitiate() 打开到服务器应用程序的DDE控制板
DDELastError() 返回DDE函数引起的最后一条错误信息
DDEPoke() 传送数据库到客户机或服务器应用程序
DDERequest() 服务器应用程序请求数据
DDESetOption() 修改或返回DDE设置
DDESetService() 添加、删除、修改服务名的状态
DDESetTopic() 连接服务名与标题名
DDETerminte() 关闭DDE控制板
----Visual FoxPro既可以作为DDE客户机,也可以作为DDE服务器。当Visual FoxPro作为客户机时,一个典型的请求从其他应用程序输入数据的FoxPro程序由包含以下步骤的代码组成:
调用DDEInitiate()函数建立与服务器应用程序的连接。
如果成功地建立了连接关系,调用DDERequest()函数请求从服务器应用程序输入信息。可以重复调用DDERequest()函数请求输入其他的信息。
完成对数据的请求后,调用DDETerminate()函数技术与服务器应用程序的连接关系。只有这样做才能够释放系统资源。
当Visual FoxPro作为服务器时,一个典型的响应其他应用程序请求数据的FoxPro程序由包含以下步骤的代码组成:
调用DDESetService()函数生成服务过程(建立服务过程名)并且指定服务过程的类型。
调用DDESetTopic()函数生成服务标题并且指定客户机请求中设定标题时的运行过程。
生成DDESetTopic()中指定的过程用以接受传递给过程的参量。客户机请求信息调用此过程,此过程执行请求操作并且向客户机应用程序返回所请求的信息。
----应用程序之间的DDE会话可以使用冷连接、温连接和热连接。当Visual FoxPro做为客户机时,所建立的连接为冷连接;当Visual FoxPro做为服务器时,可以使用其中任意的一种连接方式。可以使用DDEAdvise()函数来初始化DDE温连接和热连接的会话。传递给DDEAdvise()函数的参数之一是一个用户自定义函数的名称,服务器应用程序调用该函数通知客户机数据已经改动。因此,在温连接和热连接会话中,当数据源有所改动时,客户机能够根据服务器的通知自动进行数据更新。
----以下是一个利用DDE与Word进行数据交换的示例程序。该程序打开一个DOC文件,将其全部内容拷贝到剪贴板上,然后关闭文件并退出Word。
* 启动应用程序Word
RUN /N1 D:\WORD\WINWORD.EXE
* 建立DDE连接
Channel=DDEInitiate(“WinWord”,”System”)
* 判断连接是否已经建立
IF Channel<>-1
* 将Word应用程序最大化
=DDEExecute(Channel,”[AppMaximize]”)
* 打开文件d:\word\test.doc
=DDEExecute(Channel,’[FileOpen “d:\word\test.doc”]’)
* 选取所有内容
=DDEExecute(Channel,”[EditSelectAll]”)
* 将选取的内容拷贝到剪贴板
=DDEExecute(Channel,”[EditCopy]”)
* 将剪贴板上的内容存储到变量Letter中
Letter=_CLIPTEXT
* 退出Word
=DDEExecute(Channel,”[FileExit]”)
* 结束DDE会话
=DDETerminate(Channel)
ENDIF
* 显示剪贴板中的内容
?Letter
----以下是一个利用DDE与Excel进行数据交换的示例程序。该程序从一个电子表格文件test.xls请求数据,利用DDEAdvise()函数建立了与电子表格中两个单元R2C3和R2C4之间的数据连接关系。当这两个单元中任一数据发生改动时,执行用户自定义函数 refresh进行处理。
* 启动应用程序Excel
RUN /N1 D:\EXCEL\EXCEL.EXE
* 建立DDE连接
Channel=DDEInitiate(“Excel”,”test”)
* 判断连接是否已经建立
IF Channel<>-1
* 与单元R2C3建立温连接
=DDEAdvise(Channel,’R2C3’,refresh,1)
* 与单元R2C4建立热连接
=DDEAdvise(Channel,’R2C4’,refresh,1)
* 其它处理函数
ENDIF
* 定义函数refresh
PROCEDURE refresh
PARAMETERS channel,action,item,data,advise
DO CASE
CASE item=’R2C3’.and.advise=1
* 此处插入关于R2C3数据变化的处理程序
CASE item=’R2C4’.and.advise=2
* 此处插入关于R2C4数据变化的处理程序
ENDCASE
* 结束DDE会话
=DDETerminate(Channel)
责任编辑:小草