知识大全 剪贴板和动态数据交换(一)[4]

Posted 部件

篇首语:知识的用处就是夜行人的火把。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 剪贴板和动态数据交换(一)[4]相关的知识,希望对你有一定的参考价值。

DELPHI基础教程:剪贴板和动态数据交换(一)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   DDE客户程序的实现

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

   联接模式(ConnectMode)

  Delphi的DDE提供了两种联接模式 自动和人工 这可以通过DDEClinetConv 部件的ConnectMode属性进行设置 如下表所示

  表 DDE的联接模式

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  值           意      义

  ───────────────────────────────

  ddeAutomatic 在运行中当包含TDDEClientConv部件的窗口创建时联接自动建立

  ddeManual 只有当调用OpenLink方法时联接才建立

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

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

  对于自动模式

   向窗体中加入DDEClientConv和DDEClientItem部件并命名

   把DDEClientItem部件的DdeConv属性设置为DDEClientConv部件的名称 如果在设计时建立 则通过对象观察器进行选择 如果在运行时建立联系 则通过如下的一条语句设置属性的值 DDEClientItem DdeConv := DDEClientConv ;

   和服务器建立联系 实现数据共享

  对于人工模式

   向窗体中加入DDEClientConv部件

   和服务器建立联系

   数据更新时调用RequestData方法申请并获得数据

   和DDE服务器建立联系

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

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

   激活服务器程序 并选中你的客户程序欲联接的数据

   把数据和DDE联接信息拷贝到剪贴板上 一般说来这只需要选择服务器应用程序的 Edit|Copy 菜单

   在Delphi IDE的设计窗体中选中DDEClientConv部件

   在Object Inspector(对象观察器)中单击DDEService属性或DDETopic属性 然后再单击Ellipsis按钮 打开DDE Info对话框

   选择Paste Link按钮 此时App编辑框和Topic编辑框被自动填充 如果Paste Link按钮变灰 说明你准备用作服务器的应用程序不支持DDE或者DDE信息没有被成功地拷贝到剪贴板上

   选择OK 按钮 此时Object Inspector中的DDEService DDETopic 属性包含了建立一个DDE联接的正确值

  对于人工模式以下步骤是不需要的

   选中DDEClientItem部件 并在Object Inspector中设置DdeConv属性为已完成联接的DDEClientConv部件名称

   假如剪贴板上的DDE 联接信息仍保留的话 从Object Inspector的下拉列表框中选择 DDEItem 属性的值 否则输入正确的值

  在运行时 调用 SetLink 方法来建立DDE联接

  SetLink有两个String类型的参数 分别用来接受DDEService和DDETopic的值 过程执行后DDEClientConv部件的DDEService 和DDeTopic属性被设置 要注意的是 在运行时直接设置DDEService和DDETopic的值并不能建立一个DDE联接 而必须调用SetLink 方法进行初始化

  比如 下面的语句和Excel的System主题建立联接

  DDEClietnConv SetLink( Excel System )

  调用SetLink方法后 还需要设置DDEClientItem部件的DDEItem属性

  比如 下面的语句联接Excel的Topics项目 用以获取当前活跃文件的文件名

  DDEClietnItem DDEItem := Topics ;

  当DDE联接建立后 联接的数据保存在DDEClientItem部件的Text和Lines 属性中 Text用于保存一个字符串(String) Lines用于保存一个字符串链表(TStrings)对象

  为了显示联接数据 可以在DDEClientItem的OnChange事件中把数值赋给一个可视部件

  下面的事件过程把联接数据实时地显示在一个编辑框中

  procedure Form DDEClientItemChange(Sender: Tobject)

  begin

  Edit Text := DDEClientItem Text;

  end;

  运行状态下也可以从剪贴板上粘贴DDE联接信息 并调用SetLink建立DDE会话 下面的例子显示了当用户按下应用程序中的Paste Link按钮时 动态建立DDE会话的过程

  procedure Form OnPasteLink(Sender: Tobject)

  var

  Service Topic Item: String;

  begin

  if GetPasteLinkInfo (Service Topic Item) then

  begin

  AppName Text := Service;

  TopicName Text := Topic;

  ItemName Text := Item;

  DDEClient SetLink (Service Topic)

  DDEClientItem DdeConv := DDEClient;

  DDEClientItem DDEItem := ItemName Text;

  end;

  end;

  GetPasteLinkInfo是DDEMan 库单元中定义的一个过程 如果返回True 则DDE联接信息保存在三个参数中 如果返回False 说明剪贴板上没有正确格式的DDE联接信息

   数据申请

  虽然自动模式快捷 方便 但仍有一些理由使用DDE的人工模式

   服务器程序可能不支持自动数据传输 客户必须显式申请服务器更新一个特定的项目

   节省通信费用 假如没有实时传输的要求 则人工模式可以大幅度降低通信的开销

   若客户程序只用于控制服务器的运行 则往往没有必要使用自动模式

  人工模式下客户程序的数据更新需要采用数据申请的方式 数据申请需要调用DDEClientConv部件的RequestData方法 RequestData有一个参数 指向要申请的DDE项目 RequestData返回一个Pchar类型的无结束符字符串 包含了申请到的文本 返回字符串占用的内存必须在程序终止前显式释放

  在人工模式下 即使存在一个DDEClientItem部件且与DDEClientConv相联接 数据更新后DDEClientItem部件的Text Lines属性的值也不会改变

   数据发送

  数据发送与一般的DDE数据流向正好相反 是把数据从DDE客户应用程序发送到DDE服务器应用程序

  数据发送使用DDEClientConv部件的两个方法PokeData 和 PokeDataLines 它们的语法是

  function PokeData (Item: String ; Data: PChar) Boolean;

  function PokeDataLines (Item: String ; Data: TStrings) Boolean;

  参数Item是DDE服务器中被联接的项目 Data是要发送的数据 如果数据是一个字符串 则把它转化为PChar类型并调用PokeData方法 如果数据是一个字符串链表对象 可调用PokeDataLines方法

  方法的返回值标志数据传送是否成功 因为有一些DDE服务器应用程序并不接收发送的数据

  下面的语句把编辑框中的内容发送给服务器

  StrPCopy(TheText Edit text)

  DDEClientConv PokeData(DDEClientItem DDEItem TheText)

  过程StrPCopy把一个Pascal类型的字符串拷贝到一个无结束符的PChar类型字符串中

  返回目录 DELPHI基础教程

       编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

  ORACLE G数据库开发优化指南

  Java程序性能优化 让你的Java程序更快 更稳定

  C嵌入式编程设计模式

  Android游戏开发实践指南

cha138/Article/program/Delphi/201311/25231

相关参考

知识大全 剪贴板和动态数据交换(一)[3]

DELPHI基础教程:剪贴板和动态数据交换(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 剪贴板和动态数据交换(一)[2]

DELPHI基础教程:剪贴板和动态数据交换(一)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 剪贴板和动态数据交换(一)[1]

DELPHI基础教程:剪贴板和动态数据交换(一)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 剪贴板和动态数据交换(二)[2]

DELPHI基础教程:剪贴板和动态数据交换(二)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 剪贴板和动态数据交换(二)[3]

DELPHI基础教程:剪贴板和动态数据交换(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 剪贴板和动态数据交换(二)[1]

DELPHI基础教程:剪贴板和动态数据交换(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 利用剪贴板实现高速导出数据到Excel

利用剪贴板实现高速导出数据到Excel  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在很多的时

知识大全 数据结构考研分类复习真题 第八章 动态存储管理[4]

  .假设利用边界标识法并以首次拟合策略分配已知在某个时刻可利用空间表的状态如下图所示  (注存储块头部size域的值和申请分配的存储量均包括头部和尾部的存储空间)  请画出  ()当系统回收一个起始

知识大全 动态性能视图,Oracle数据库维护的好帮手(一)

动态性能视图,Oracle数据库维护的好帮手(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 数据结构考研分类复习真题 第八章 动态存储管理[3]

  .试叙述动态存储分配伙伴系统的基本思想它和边界标识法不同点是什么?【青岛大学十(分)】【中国人民大学一(分)】  .组织成循环链表的可利用空间表附加什么条件时首次适配策略就转变为最佳适配策略?【北