DDE方式下Delphi7程序间及与VB6程序的数据交换
WINDOWS平台的DDE功能,为不同应用程序间数据实时交互提供了简便的方法。下面的内容,是我的具体实践。
1. 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实时数据交换就完成了,下面是完整代码。
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls, StdCtrls, DdeMan;typeTForm1 = 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;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
beginEdit1.Text := FormatDateTime('hh:mm:ss', now);DdeServerItem1.Text := Edit1.Text;
end;procedure TForm1.Button2Click(Sender: TObject);
begintryDdeClientConv1.CloseLink;exceptend;Application.Terminate;
end;procedure TForm1.Button1Click(Sender: TObject);
begintryDdeClientItem1.DdeConv := DdeClientConv1;if (DdeClientConv1.SetLink('Project1','DdeServerConv1') = False) thenbeginShowMessage('Unable to connect DDEserver!');Exit;end;DdeClientItem1.DdeItem := 'DdeServerItem1';DdeClientConv1.OpenLink;exceptend;
end;procedure TForm1.DdeClientItem1Change(Sender: TObject);
beginEdit2.Text := DdeClientItem1.Text;
end;end.
利用上面Delphi的DDE server,写VB6客户端就更简单了。
放个TEXT1,用它DDE相关的属性,用好SERVICE和TOPIC,数据就会从DELPHI程序的SERVER中传送过来。
完整的VB6程序代码如下:
Option ExplicitPrivate Sub Command1_Click()On Error Resume Next' 连接Delphi的DDE服务:服务名=DelphiDDE,主题=DataTopicText1.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 SubPrivate Sub Timer1_Timer()On Error Resume NextCommand1_Click
End Sub
DDE delphi7 client 和 DDE vb6 client 同时接收 DDE delphi7 server
DDE Delphi7 及 VB6 代码链接
https://download.csdn.net/download/weixin_45707491/92132828