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

Posted 部件

篇首语:缺乏知识就无法思考,缺乏思考也就得不到知识。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 剪贴板和动态数据交换(二)[3]相关的知识,希望对你有一定的参考价值。

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

  添加程序项

  procedure TForm AddButtonClick(Sender: TObject)

  var

  Name: String;

  begin

  Name := InputBox( Input Box Input Application full_Path name )

  if Name = then

  MessageDlg( Application name can not be blank mtError [mbOK] )

  else

  if SendMacro(Name AddItem ) = False then

  MessageDlg( Unable to Add Item mtInformation [mbOK] )

  end;

  删除程序组

  procedure TForm DeleteButtonClick(Sender: TObject)

  var

  Name: String;

  begin

  Name := InputBox( Input Box Input Group Name to be Deleted )

  if Name = then

  MessageDlg( Group name can not be blank mtError [mbOK] )

  else

  if SendMacro(Name DeleteGroup ) = False then

  MessageDlg( Unable to create group mtInformation [mbOK] )

  end;

   DDE服务器程序的实现

  DDE服务器程序响应DDE客户的请求 一般地它包含了客户程序希望获取的数据

  创建一个DDE服务器程序 必须要把一个DDEServerItem部件添加到窗体中 DDEServerItem的text或Lines属性包含了要联接的数据 一般地 DDEServerItem部件又和另一个文本控件相联系 当文本控件中的内容变化时则更新DDEServerItem 的text或Lines属性的值 下面的一段程序把DDEServerItem和一个列表框相联系 这一联系是在列表框的OnChange事件中实现

  procedure Form OnListBoxChange(Sender: TObject)

  begin

  DDEServerItem Lines := ListBox Items;

  end;

  创建DDE服务器程序时也可以再加入一个DDEServerConv部件 并把两个部件利用DDEServerItem的ServerConv属性联系起来 此时DDE主题成为部件DDEServerConv的名称 而不是拥有DDEServerItem部件窗体的标题

  在下列情况下使用DDEServerConv部件成为必要

   拥有DDEServerItem 部件窗体的标题可能在运行时改变或可能有其它窗体拥有同样的标题 在这种情况下DDE联接可能无法建立

   DDE客户程序可能会向你的服务器程序发送一条宏命令 在这种情况下只有拥有一个DDEServerConv部件才能响应OnMacroExecute事件并执行相应的动作

   和DDE客户程序建立联接

  一般说来 建立DDE联接是客户程序的任务 但服务器程序可以把一个联接拷贝到剪贴板上供客户程序粘贴并建立DDE会话 步骤如下

   调用DDEServerItem部件的CopyToClipboard方法 把Text(或Lines)属性的值和DDE联接信息拷贝到剪贴板上

   DDE客户程序插入联接的数据 一般地这是通过选择适当的命令(如Edit|Paste Special或Edit|Paste Link)来实现的

   响应DDE事件

  部件DDEServerConv有三个事件 OnOpen OnClose OnExecuteMacro 前两个事件在DDE会话建立和终止时触发 同( )中的介绍

  OnExecuteMacro事件用于响应客户程序发送过来的宏指令 OnExecuteMacro事件处理过程有一个Msg参数 保存发送过来的指令串 用户可以在该过程中决定如何响应这些宏指令

  DDEServerItem部件只有一个事件OnPokeData 这一事件用于响应客户程序发送来的数据 如果客户程序是Delphi程序 则客户程序调用了PokeData或PokeDataLines方法 在这一事件的处理过程中用户可以把发送来的数据保存到一个合适的地方 一般说来这应该就是DDEServerItem所联系的文本控件

  下面的程序把发送来的数据保存到ListBox中

  procedure Form OnDDEServerItemPokeData(Serder: TObject)

  begin

  ListBox Items := DDEServerItem Lines;

  end;

   DDE服务器应用例程

  下面我们创建一个DDE服务器例程和一个相应的DDE客户例程

  DDE服务器例程可以完成的工作有

   把DDE联接信息拷贝到剪贴板上供其它程序使用

   利用一个TMemo部件为其它程序提供数据源

   接收客户程序发送来的数据

   根据客户程序发送来的宏指令改变自身的运行状态

  其中各部件的关键属性如下

  DDESrvrForm ActiveControl = Memo

  DDESrvrForm Menu = MainMenu

  Bevel Align = alTop

  Memo Align = alClient

  DDETestItem ServerConv = DDETestTopic

  通过设置Bevel Memo 的Align属性 可以保证窗口大小变化时仍能有较为美观的屏幕显示

  Memo 是服务器的数据源 DDE项目部件DDETestItem通过Memo 的OnChange事件与Memo 建立联系

  procedure TDdeSrvrForm doOnChange(Sender: TObject)

  begin

  if not FInPoke then

  DDETestItem Lines := Memo Lines;

  end;

  其中FInPoke是一个布尔类型的私有数据成员 用于标志程序是否在处理客户程序的数据发送 当数据是由客户发送过来转存到数据源时 则没有必要再把数据传给DDE项目部件

  把联接信息拷贝到剪贴板 只需简单调用DDETestItem的CopyToClipboard方法

  procedure TDDESrvrForm CopyClick(Sender: TObject)

  begin

  DDETestItem CopyToClipboard;

  end;

  这是通过菜单项Edit|Copy来调用的

  接收客户程序发送来的数据 是在DDETestItem的OnPokeData事件处理过程中 在接收过程中改变FInPoke的值 以阻止数据的无效反送

  procedure TDDESrvrForm doOnPoke(Sender: TObject)

  begin

  FInPoke := True;

  Memo Lines := DDETestItem Lines;

  FInPoke := False;

  end;

  在DDE会话部件DDETestTopic的OnExecuteMacro事件处理过程中处理客户发送来的宏指令 我们共定义了五种可以响应的宏指令 CopyDDE Clear WS_Normal WS_MINIMIZED WS_MAXIMIZED 分别用于拷贝联接信息 清除Memo 中的内容以及改变窗口显示状态

cha138/Article/program/Delphi/201311/25226

相关参考

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  .二进制地址为大小为()和()块的伙伴地址分别为_________________【上海大学二(分)】  无用单元是指________例________【北方交通大学二(分)】  四应用题  .伙

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[8]

  .[题目分析]本题静态链表中结点是按动态二叉链表的前序遍历顺序存放的首先对动态二叉链表的二叉树进行前序遍历填写静态链表的下标和data域再对动态二叉链表的二叉树进行层次遍历设队列Q填写静态链表的l