DDE聯接的建立通過調用SetLink方法實現。
建立新聯接的實現代碼如下。
procedure TFormD.doNewLink(Sender: TObject);
begin
DDEClient.SetLink (AppName.Text, TopicName.Text);
DDEClientItem.DdeConv := DDEClient;
DDEClientItem.DDEItem := ItemName.Text;
end;
通過從剪貼板粘貼聯接信息來建立聯接的實現代碼如下。
procedure TFormD.Edit1Click(Sender: TObject);
var
Service, Topic, Item : String;
begin
PasteLink1.Enabled := GetPasteLinkInfo (Service, Topic, Item);
end;
procedure TFormD.doPasteLink(Sender: TObject);
var
Service, Topic, Item : String;
begin
if GetPasteLinkInfo (Service, Topic, Item) then
begin
AppName.Text := Service;
TopicName.Text := Topic;
ItemName.Text := Item;
DDEClient.SetLink (Service, Topic);
DDEClientItem.DdeConv := DDEClient;
DDEClientItem.DdeItem := ItemName.Text;
end;
end;
在DDEClientItem的OnChange事件處理過程中把接收到的事件保存在DDEDat中。
procedure TFormD.DDEClientItemChange(Sender: TObject);
begin
DDEDat.Lines := DDEClientItem.Lines;
end;
數據發送的實現代碼如下。
procedure TFormD.doPoke (Sender: TObject);
var
DDECli : TDDEClientConv;
begin
DDECli := DDEClientItem.DdeConv;
if DdeCli <> nil then
DDECli.PokeDataLines (DDEClientItem.DDEItem, PokeDat.Lines);
end;
宏指令發送的實現代碼如下。
procedure TFormD.doMacro (Sender: TObject);
var
DDECli: TDDEClientConv;
Cmd: String;
begin
DDECli := DDEClientItem.DdeConv;
if DDECli <> nil then
begin
Cmd := PokeDat.Text + #13#10;
DDECli.ExecuteMacroLines (PokeDat.Lines, True);
end;
end;
運行以上兩個程序,建立DDE聯接。經測試,數據傳輸、數據發送和宏指令的發送與執行都達到預期要求。
7.4.4 小結
剪貼板和DDE是Windows下數據通信的兩種方法。Delphi以簡便、友好的方式實現了相應的功能,為用戶編程提供了方便。一般說來,剪貼板多用於靜態數據傳輸,而DDE用於動態數據交換、控制其它程序運行等場合。這些內容對於多用戶環境下的程序開發是很重要的