知识大全 剪贴板和动态数据交换(二)[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相关参考
DELPHI基础教程:剪贴板和动态数据交换(二)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
DELPHI基础教程:剪贴板和动态数据交换(二)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
DELPHI基础教程:剪贴板和动态数据交换(一)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
DELPHI基础教程:剪贴板和动态数据交换(一)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
DELPHI基础教程:剪贴板和动态数据交换(一)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
DELPHI基础教程:剪贴板和动态数据交换(一)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
利用剪贴板实现高速导出数据到Excel 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在很多的时
知识大全 动态性能视图,Oracle数据库维护的好帮手(二)
动态性能视图,Oracle数据库维护的好帮手(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 数据结构考研分类复习真题 第八章 动态存储管理[2]
.二进制地址为大小为()和()块的伙伴地址分别为_________________【上海大学二(分)】 无用单元是指________例________【北方交通大学二(分)】 四应用题 .伙
知识大全 数据结构考研分类复习真题 第六章 答案 (五)[8]
.[题目分析]本题静态链表中结点是按动态二叉链表的前序遍历顺序存放的首先对动态二叉链表的二叉树进行前序遍历填写静态链表的下标和data域再对动态二叉链表的二叉树进行层次遍历设队列Q填写静态链表的l