DELPHI剪贴板和动态数据交换基础教程_Delphi_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

DELPHI剪贴板和动态数据交换基础教程

作者:黑客防线网安网站维护基地 来源:黑客防线网安网站维护基地 浏览次数:0

本篇关键词:DELPHI剪贴板
黑客防线网安网讯:应用程序间的数据交换是象Windows 这样的多任务环境的重要特性。作为一种基于Windows的开发工具,Delphi支持如下四种数据交换方式:剪贴板、动态数据交换 ( DDE)、对象联接与嵌入(OLE)以及动态联接库(DLLs)。这中间

        DDEClientConv在设计时和程序管理器建立一个DDE会话,其中DDE服务器和DDE主题 都为PROGMAN。联接模式ConnectMode设置为ddeManual

        我们把只有一个字符串参数的命令发送情况抽象出来,形成下面的SendMacro函数。 

function TForm1.SendMacro(Name: String;Command: String): Boolean;

var

Macro: String;

Cmd: array[0..255] of Char;

begin

Result := True;

if Name <> '' then

begin

Macro := Format('['+Command+'(%s)]', [Name]) + #13#10;

StrPCopy (Cmd, Macro);

DDEClient.OpenLink;

if not DDEClient.ExecuteMacro(Cmd, False) then

Result := False;

DDEClient.CloseLink;

end;

end; 

       过程首先利用Format函数形成宏字符串: 

Macro := Format('['+Command+'(%s)]', [Name]) + #13#10; 

        而后把Pascal类型的字符串拷贝到一个程序管理器可接受的PChar类型字符串中。

        DDE联接采用人工模式。首先调用OpenLink方法。而后调用ExecuteMacro方法发送命令,如失败则返回False。最后用CloseLink关闭联接。

        三个按钮CreateButtonAddButtonDeleteButton分别用于创建程序组、添加程序项、删除程序组。它们的程序实现大同小异,如下所示。

创建程序组: 

procedure TForm1.CreateButtonClick(Sender: TObject);

var

Name: String;

begin

Name := InputBox('Input Box','Input Group Name','');

if Name = '' then

MessageDlg('Group name can not be blank.', mtError, [mbOK], 0)

else

if SendMacro(Name,'CreateGroup') = False then

MessageDlg('Unable to create group.', mtInformation, [mbOK], 0);

end;

添加程序项: 

procedure TForm1.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], 0)

else

if SendMacro(Name,'AddItem') = False then

MessageDlg('Unable to Add Item.', mtInformation, [mbOK], 0);

end;

删除程序组: 

procedure TForm1.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], 0)

else

if SendMacro(Name,'DeleteGroup') = False then

MessageDlg('Unable to create group.', mtInformation, [mbOK], 0);

end;

7.4 DDE服务器程序的实现 

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

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

procedure Form1.OnListBoxChange(Sender: TObject);

begin

DDEServerItem1.Lines := ListBox1.Items;

end; 

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

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

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

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

7.4.1 DDE客户程序建立联接 

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

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

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

7.4.2 响应DDE事件 

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

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

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

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

procedure Form1.OnDDEServerItemPokeData(Serder: TObject)

begin

ListBox1.Items := DDEServerItem1.Lines;

end; 

7.4.3 DDE服务器应用例程 

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

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

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

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

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-7703-1.html
网站维护教程更新时间:2012-03-02 12:52:10  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer