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

Delphi DDE 客戶端編程實戰:聯接建立、數據收發、宏命令與剪貼板粘貼聯接

     編輯:Delphi

7.4 DDE 服務端程序實現(續)

7.4.1 與 DDE 客戶端建立聯接

DDE 聯接通常由客戶端發起,但服務端可將聯接信息複製到剪貼板,供客戶端粘貼建立會話:

  1. 調用 DDEServerItem.CopyToClipboard,將 Text/Lines 屬性值與 DDE 聯接信息放入剪貼板
  2. 客戶端通過「編輯|選擇性粘貼」或「編輯|粘貼鏈接」菜單插入聯接數據

7.4.2 響應 DDE 事件

DDEServerConv 三大事件:

  • OnOpen、OnClose:會話建立/終止觸發(同 7.3.7)
  • OnExecuteMacro:響應客戶端發送的宏命令,參數 Msg 保存命令字符串,可在處理過程中決定響應動作

DDEServerItem 單一事件 OnPokeData:響應客戶端發送的數據(客戶端調用 PokeData/PokeDataLines)。處理中可將數據保存到關聯的文本控件。

procedure Form1.OnDDEServerItemPokeData(Sender: TObject);
begin
  ListBox1.Items := DDEServerItem1.Lines;
end;

7.4.3 DDE 服務端應用例程

功能:① 剪貼板輸出聯接信息 ② TMemo 作為數據源 ③ 接收客戶端數據 ④ 根據宏命令改變運行狀態。

關鍵屬性:DDETestItem.ServerConv := DDETestTopic;Bevel1.Align=alTop、Memo1.Align=alClient 保證窗口縮放美觀。

數據源同步(Memo1.OnChange):

procedure TDdeSrvrForm.doOnChange(Sender: TObject);
begin
  if not FInPoke then
    DDETestItem.Lines := Memo1.Lines;
end;

FInPoke 標識是否正在處理客戶端數據發送,避免無效反送。

剪貼板輸出聯接:

procedure TDDESrvrForm.CopyClick(Sender: TObject);
begin
  DDETestItem.CopyToClipboard;
end;

接收客戶端數據(DDETestItem.OnPokeData):

procedure TDDESrvrForm.doOnPoke(Sender: TObject);
begin
  FInPoke := True;
  Memo1.Lines := DDETestItem.Lines;
  FInPoke := False;
end;

宏命令處理(DDETestTopic.OnExecuteMacro):定義五種命令:CopyDDE、Clear、WS_Normal、WS_Minimized、WS_Maximized,分別用於複製聯接、清空內容、改變窗口狀態。

procedure TDdeSrvrForm.doMacro(Sender: TObject; Msg: TStrings);
var Cmd: String; i: Integer;
begin
  Cmd := ''; if Msg.Count = 0 then Exit;
  for I := 0 to Msg.Count-1 do
  begin
    Cmd := Msg.Strings[i];
    if UpperCase(Cmd) = 'COPYDDE' then DDETestItem.CopyToClipboard
    else if UpperCase(Cmd) = 'CLEAR' then Memo1.Text := ''
    else if UpperCase(Cmd) = 'WS_NORMAL' then WindowState := wsNormal
    else if UpperCase(Cmd) = 'WS_MINIMIZED' then WindowState := wsMinimized
    else if UpperCase(Cmd) = 'WS_MAXIMIZED' then WindowState := wsMaximized
    else MessageDlg('Invalid Command', mtWarning, [mbOK], 0);
  end;
end;

配套 DDE 客戶端程序驗證服務端,同時提供完整客戶端設計實例:接收數據保存至 DDEDat (TMemo),發送數據/宏命令輸入於 PokeDat,兩按鈕發送,兩菜單項建立新聯接/粘貼聯接。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved