其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:剪贴板和动态数据交换(二)[3]


发布日期:2023年10月12日
 
DELPHI基础教程:剪贴板和动态数据交换(二)[3]

添加程序项

procedure TFormAddButtonClick(Sender: TObject)

var

Name: String;

begin

Name := InputBox(Input BoxInput Application full_Path name

if Name = then

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

else

if SendMacro(NameAddItem) = False then

MessageDlg(Unable to Add Item mtInformation [mbOK]

end;

删除程序组

procedure TFormDeleteButtonClick(Sender: TObject)

var

Name: String;

begin

Name := InputBox(Input BoxInput Group Name to be Deleted

if Name = then

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

else

if SendMacro(NameDeleteGroup) = 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 FormOnListBoxChange(Sender: TObject)

begin

DDEServerItemLines := ListBoxItems;

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有三个事件OnOpenOnCloseOnExecuteMacro前两个事件在DDE会话建立和终止时触发同()中的介绍

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

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

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

procedure FormOnDDEServerItemPokeData(Serder: TObject)

begin

ListBoxItems := DDEServerItemLines;

end;

DDE服务器应用例程

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

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

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

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

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

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

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

DDESrvrFormActiveControl = Memo

DDESrvrFormMenu = MainMenu

BevelAlign = alTop

MemoAlign = alClient

DDETestItemServerConv = DDETestTopic

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

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

procedure TDdeSrvrFormdoOnChange(Sender: TObject)

begin

if not FInPoke then

DDETestItemLines := MemoLines;

end;

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

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

procedure TDDESrvrFormCopyClick(Sender: TObject)

begin

DDETestItemCopyToClipboard;

end;

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

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

procedure TDDESrvrFormdoOnPoke(Sender: TObject)

begin

FInPoke := True;

MemoLines := DDETestItemLines;

FInPoke := False;

end;

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

[] [] [] []

               

上一篇:DELPHI基础教程:剪贴板和动态数据交换(二)[4]

下一篇:DELPHI基础教程:剪贴板和动态数据交换(二)[2]