Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->编程语言 ->Delphi ->Windows的DDE原理
  相关分类: 
ASP
ViualBasic
UML / Rational Rose
PHP4/PHP5
Perl
JAVA/JSP教程
Delphi
ColdFusion
CGI
C/C++
ASP.NET
XML
  站内搜索: 
热门文章排行
热门文章排行 Delphi字符串函数大全(06-05)
Windows的DDE原理(06-05)
制作QQ消息炸弹(06-05)
delphi中的XML解析控件TXMLDocument(06-05)
谈Delphi编程中“流”的应用(06-05)
精采文章排行
精采文章排行 如何用Delphi制作录音程序(06-05)
谈Delphi编程中“流”的应用(06-05)
如何把数据库的内容写入到Word文档中(06-05)
从实作标题栏按钮开始浅谈组件的制作(06-05)
“98五笔字型输入法”大批量造词(06-05)
  ·谈Delphi编程中“流”的应用·如何把数据库的内容写入到Word文档中?·从实作标题栏按钮开始浅谈组件的制作·“98五笔字型输入法”大批量造词·关于Delphi大Bug的更详细的例子·不知您是笨蛋,还是我是笨蛋,关于Delphi·剖析TThread类·理解类引用这种类型·改良控件-Delphi自带控件Bug的消除

Windows的DDE原理

作者:Webmaster   来源:Linuxdby.com   点击:   日期:2007-06-05 [收藏] [投稿]

  IE是否经常中毒?推荐您

7.2.1 Windows的DDE原理 

Windows的DDE机制基于Windows的消息机制。两个Windows应用程序通过相互之间传递DDE消息进行DDE会话(Conversation),从而完成数据的请求、应答、传输。这两个应用程序分别称为服务器(Server)和客户(Client)。服务器是数据的提供者,客户是数据的请求和接受者。

DDE会话由客户程序启动。客户程序把一条消息(WM_DDE_INITIATE)传播给当前运行的所有Windows程序。这条消息指明了客户程序所需要的一般数据(应用程序、主题)。拥有这些数据的DDE服务器可以响应这条被传播的消息。此时,DDE会话就开始了。

由于在每个主题中,DDE服务器可以支持一个或多个数据项,所以在客户请求数据时应同时指明应用程序名、主题名和项目名。应用程序、主题、项目是DDE中三个最基本的概念。

利用Windows本身提供的DDE消息和API进行DDE编程是一件相当棘手的问题。 虽然使用DDE管理库(ddeml.dll)可以一定程度上减轻开发者的工作负担,但开发DDE程序仍不是一件轻松的事情。

此时Delphi出现了!Delphi通过其自身巧妙的设计使开发一个DDE应用程序同开发一个普通程序一样地快捷、方便。


7.2.2 Delphi的DDE实现机制简介 

Delphi把所有的DDE功能做到四个部件中,它们是:
● TDDEClientConv : 用于客户程序建立和维护一个DDE会话
● TDDEClientItem : 用于客户程序建立和维护数据交换通道
● TDDEServerConv : 用于服务器程序响应DDE会话
● TDDEServerItem : 用于服务器程序维护数据交换通道

  前两个部件用于生成一个DDE客户程序,后两个部件用于生成一个DDE服务器程序。如果一个应用程序同时拥有这些部件,则这一程序既可以充当DDE客户,也可以充当DDE服务器。

会话部件TDDEClientConv、TDDEServerConv用于建立和维护一个DDE会话。DDE会话包括DDE服务和DDE主题两部分。

DDE服务是DDE服务器的名称,即在一般的Windows DDE机制中所讲的应用程序名。一般说来这一名称是DDE服务器应用程序执行文件名去掉 .EXE后缀。比如你的应用程序要和Word 6.0建立会话,则DDE服务为WINWORD。但也不尽然。比如你的应用程序要和Borland ReportSmith ( RPTSMITH.EXE ) 建立会话,则DDE 服务为 Report Smith。DDE服务到底如何,读者可参看相关的DDE服务器应用程序文档。

DDE主题是一个包含了联接信息的数据单元。一般说来DDE 主题是一个包括扩展名的完整文件名。例如和Excel中的一个文件建立DDE会话,则主题可能是 

Topic = 'c:\excel\Example\sale.xls' 

如果服务器是一个Delphi应用程序,缺省情况下主题是包含欲联接数据窗体的标题。如果服务器使用了DDEServerConv部件,则要求使用部件DDEServerConv的名称作为DDE主题。

项目部件TDDEclientItem、TDDEServerItem用于建立和维护DDE数据的传输通道。 DDE项目中包含着实际欲传输的数据。DDE项目的格式取决于DDE服务器应用程序。一个可能的DDE项目例子是电子表格中的单元和数据库表中的域。如果服务器是Delphi应用程序,则项目是连接的 DDEServerItem部件的名称。

Delphi的DDE实现机制方便、实用,但也有一个令人遗憾的缺陷:只能传输文本数据以及命令、宏,而不能传输图像数据。在这一点上微软公司推出的Visual Basic 要略胜一筹。不过在目前文本数据的使用仍是最广泛的,而且图像传输可以利用剪贴板和OLE来实现,则这一缺陷也并无很大的影响。 

7.3 DDE客户程序的实现 

DDE客户程序启动DDE会话,向服务器请求并从服务器接收数据。同时还可以向服务器发送数据、命令、宏,改变服务器的状态并控制服务器的运行。 

7.3.1 联接模式(ConnectMode) 

  Delphi的DDE提供了两种联接模式:自动和人工。这可以通过DDEClinetConv 部件的ConnectMode属性进行设置。如下表所示。
表 7.5 DDE的联接模式
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     值           意      义
───────────────────────────────
   ddeAutomatic 在运行中当包含TDDEClientConv部件的窗口创建时联接自动建立
   ddeManual 只有当调用OpenLink方法时联接才建立
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

不同联接模式,DDE客户程序的实现方式不同。

对于自动模式:
1. 向窗体中加入DDEClientConv和DDEClientItem部件并命名;
2. 把DDEClientItem部件的DdeConv属性设置为DDEClientConv部件的名称;
如果在设计时建立,则通过对象观察器进行选择;如果在运行时建立联系, 则通过如下的一条语句设置属性的值:

DDEClientItem1.DdeConv := 'DDEClientConv1' ; 

3. 和服务器建立联系,实现数据共享。

对于人工模式:

1.向窗体中加入DDEClientConv部件;
2.和服务器建立联系;
3. 数据更新时调用RequestData方法申请并获得数据。 

7.3.2 和DDE服务器建立联系 

和DDE服务器建立联系,既可以在设计时进行,也可以在运行时进行。

在设计时,DDE联接可以通过剪贴板进行粘贴。具体步骤如下:

1. 激活服务器程序,并选中你的客户程序欲联接的数据;
2. 把数据和DDE联接信息拷贝到剪贴板上。一般说来这只需要选择服务器应用程序的 Edit|Copy 菜单;
3. 在Delphi IDE的设计窗体中选中DDEClientConv部件;
4. 在Object Inspector(对象观察器)中单击DDEService属性或DDETopic属性,然后再单击Ellipsis按钮,打开DDE Info对话框;
5.选择Paste Link按钮。此时App编辑框和Topic编辑框被自动填充。如果Paste Link按钮变灰,说明你准备用作服务器的应用程序不支持DDE或者DDE信息没有被成功地拷贝到剪贴板上;
6.选择OK 按钮。此时Object Inspector中的DDEService、DDETopic 属性包含了建立一个DDE联接的正确值。
对于人工模式以下步骤是不需要的。
7.选中DDEClientItem部件,并在Object Inspector中设置DdeConv属性为已完成联接的DDEClientConv部件名称;
8.假如剪贴板上的DDE 联接信息仍保留的话,从Object Inspector的下拉列表框中选择 DDEItem 属性的值。否则输入正确的值。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页12 3 4 5 6 下一页

上一篇:校验码辅导讲座   下一篇:delphi中command/action的疑惑
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·如何用Delphi制作录音程序

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。