首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi DDE 客戶端編程基礎:聯接建立、數據請求、數據發送、剪貼板動態聯接

     編輯:Delphi

7.3.2 與 DDE 服務端建立聯接

設計時/運行時均可建立。設計時通過剪貼板粘貼:

  1. 激活服務端,選中欲聯接數據
  2. 服務端 編輯|複製 放入剪貼板(含 DDE 聯接信息)
  3. Delphi IDE 選中 DDEClientConv 組件
  4. 屬性觀察器點擊 DDEService/DDETopic 省略號按鈕,打開 DDE Info 對話框
  5. 選 Paste Link,自動填充 App/Topic 編輯框(灰色表示服務端不支持 DDE 或複製失敗)
  6. 確定,屬性觀察器獲得正確值

手動模式下第 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 表示剪貼板無正確格式信息。

7.3.3 數據請求

使用手動模式理由:① 服務端不支持自動傳輸 ② 節省通信開銷 ③ 僅控制服務端運行無需實時數據。手動模式下調用 DDEClientConv.RequestData:

  • 參數:要請求的 DDE 項目
  • 返回:PChar 無結束符字符串,內存須顯式釋放
  • 即使存在關聯的 DDEClientItem,其 Text/Lines 也不會自動更新

7.3.4 數據發送

反向數據流:客戶端 → 服務端。使用 PokeData/PokeDataLines:

function PokeData(Item: String; Data: PChar): Boolean;
function PokeDataLines(Item: String; Data: TStrings): Boolean;
  • Item:服務端被聯接項目
  • Data:發送數據,字符串用 PokeData(需 StrPCopy 轉 PChar),字符串鏈表用 PokeDataLines
  • 返回值標識傳送成功與否(部分服務端不接收發送數據)
StrPCopy(TheText, Edit1.Text);
DDEClientConv1.PokeData(DDEClientItem1.DDEItem, TheText);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved