設計時/運行時均可建立。設計時通過剪貼板粘貼:
編輯|複製 放入剪貼板(含 DDE 聯接信息)DDEClientConv 組件DDEService/DDETopic 省略號按鈕,打開 DDE Info 對話框Paste Link,自動填充 App/Topic 編輯框(灰色表示服務端不支持 DDE 或複製失敗)手動模式下第 7-8 步不需執行。運行時調用 SetLink 方法:
DDEClientConv.SetLink('Excel', 'System'); // 與 Excel System 主題建立聯接
DDEClientItem.DDEItem := 'Topics'; // 聯接 Topics 項目獲取活躍文件名
運行時直接設置屬性無法建立聯接,必須調用 SetLink 初始化。聯接建立後數據保存在 DDEClientItem.Text/Lines,可在 OnChange 事件實時顯示:
procedure Form1.DDEClientItemChange(Sender: TObject);
begin
Edit1.Text := DDEClientItem1.Text;
end;
procedure Form1.OnPasteLink(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;
GetPasteLinkInfo(DDEMan 單元)返回 True 時參數保存聯接信息,False 表示剪貼板無正確格式信息。
使用手動模式理由:① 服務端不支持自動傳輸 ② 節省通信開銷 ③ 僅控制服務端運行無需實時數據。手動模式下調用 DDEClientConv.RequestData:
PChar 無結束符字符串,內存須顯式釋放DDEClientItem,其 Text/Lines 也不會自動更新反向數據流:客戶端 → 服務端。使用 PokeData/PokeDataLines:
function PokeData(Item: String; Data: PChar): Boolean;
function PokeDataLines(Item: String; Data: TStrings): Boolean;
Item:服務端被聯接項目Data:發送數據,字符串用 PokeData(需 StrPCopy 轉 PChar),字符串鏈表用 PokeDataLinesStrPCopy(TheText, Edit1.Text);
DDEClientConv1.PokeData(DDEClientItem1.DDEItem, TheText);