WINDOWS平台的DDE功能,为不同应用程序间数据实时交互提供了简便的方法。下面的内容,是我的具体实践。
- Delphi7程序间的DDE数据交互
DDE SERVER和DDE CLIENT做到了同一个程序界面下,将其分成两个不同程序是同样的方法,只不过做在一个程序界面下更简便。
DDE换有三个重要因素:SERVICE、TOPIC和ITEM,这是DDE本身定义的,与编程语言无关。就是说无论用什么语言编程,都要操作DDE的这三个核心要素。

DELPHI下DDE编程,程序名就是SERVICE名,DdeServerCon就是TOPIC,DdeServerItem就是ITEM,其内容就是用于交互的数据,比如文本框中的内容或其它变量中的内容,使用的是文本方式。
在FORM上,将Server和Client控件同时摆放好。

Server端的两个控件配置时,将SERVER控件的名称填到SERVERITEM控件的ServerConv处;Client端的两个控件用类似的方法配置。

控件配置好后,在窗体上放置一个TIMER,每秒更新一下EDIT1控件的内容,同时更新DdeServerItem1的TEXT成员的内容。
Edit1.Text := FormatDateTime('hh:mm:ss', now);
DdeServerItem1.Text := Edit1.Text;
接下来在COMMAND1下,进行DDE连接。如果控件属性没填写,还可以在程序中完成。
try
DdeClientItem1.DdeConv := DdeClientConv1;
if (DdeClientConv1.SetLink('Project1','DdeServerConv1') = False) then
begin
ShowMessage('Unable to connect DDEserver!');
Exit;
end;
DdeClientItem1.DdeItem := 'DdeServerItem1';
DdeClientConv1.OpenLink;
except
end;
上面的程序一是设置连接SetLink,然后是让DdeClientConv去OpenLink,可以清楚地看到SERVICE和TOPIC的表示 'Project1','DdeServerConv1'
一旦建立连接,SERVER端EDIT1中的内容,可以在CLIENT端自动同步。用的是DdeClientItem控件中的DdeClientItem1Change事件驱动的。

procedure TForm1.DdeClientItem1Change(Sender: TObject);
begin
Edit2.Text := DdeClientItem1.Text;
end;
DELPHI简单的DDE实时数据交换就完成了,下面是完整代码。
Delphi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DdeMan;
type
TForm1 = class(TForm)
DdeServerConv1: TDdeServerConv;
DdeServerItem1: TDdeServerItem;
DdeClientConv1: TDdeClientConv;
DdeClientItem1: TDdeClientItem;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DdeClientItem1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text := FormatDateTime('hh:mm:ss', now);
DdeServerItem1.Text := Edit1.Text;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
DdeClientConv1.CloseLink;
except
end;
Application.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
DdeClientItem1.DdeConv := DdeClientConv1;
if (DdeClientConv1.SetLink('Project1','DdeServerConv1') = False) then
begin
ShowMessage('Unable to connect DDEserver!');
Exit;
end;
DdeClientItem1.DdeItem := 'DdeServerItem1';
DdeClientConv1.OpenLink;
except
end;
end;
procedure TForm1.DdeClientItem1Change(Sender: TObject);
begin
Edit2.Text := DdeClientItem1.Text;
end;
end.
利用上面Delphi的DDE server,写VB6客户端就更简单了。

放个TEXT1,用它DDE相关的属性,用好SERVICE和TOPIC,数据就会从DELPHI程序的SERVER中传送过来。
完整的VB6程序代码如下:
vbnet
Option Explicit
Private Sub Command1_Click()
On Error Resume Next
' 连接Delphi的DDE服务:服务名=DelphiDDE,主题=DataTopic
Text1.LinkTopic = "Project1|DdeServerConv1"
' 指定数据项(与Delphi的DdeServerItem1.Name一致)
Text1.LinkItem = "DdeServerItem1"
' 设置连接模式:1=自动更新,2=手动更新
Text1.LinkMode = 1 ' 自动接收数据更新
Text1.LinkMode = 0 ' Broke connection
End Sub
' 断开连接
Private Sub Command2_Click()
End
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
Command1_Click
End Sub
DDE delphi7 client 和 DDE vb6 client 同时接收 DDE delphi7 server

DDE Delphi7 及 VB6 代码链接