熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:剪貼板和動態數據交換(二)[3]

2022-06-13   來源: Delphi編程 

  添加程序項

  procedure TFormAddButtonClick(Sender: TObject)

  var

  Name: String;

  begin

  Name := InputBox(Input BoxInput Application full_Path name

  if Name = then

  MessageDlg(Application name can not be blank mtError [mbOK]

  else

  if SendMacro(NameAddItem) = False then

  MessageDlg(Unable to Add Item mtInformation [mbOK]

  end;

  刪除程序組

  procedure TFormDeleteButtonClick(Sender: TObject)

  var

  Name: String;

  begin

  Name := InputBox(Input BoxInput Group Name to be Deleted

  if Name = then

  MessageDlg(Group name can not be blank mtError [mbOK]

  else

  if SendMacro(NameDeleteGroup) = False then

  MessageDlg(Unable to create group mtInformation [mbOK]

  end;

   DDE服務器程序的實現

  DDE服務器程序響應DDE客戶的請求一般地它包含了客戶程序希望獲取的數據

  創建一個DDE服務器程序必須要把一個DDEServerItem部件添加到窗體中DDEServerItem的text或Lines屬性包含了要聯接的數據一般地 DDEServerItem部件又和另一個文本控件相聯系當文本控件中的內容變化時則更新DDEServerItem 的text或Lines屬性的值下面的一段程序把DDEServerItem和一個列表框相聯系這一聯系是在列表框的OnChange事件中實現

  procedure FormOnListBoxChange(Sender: TObject)

  begin

  DDEServerItemLines := ListBoxItems;

  end;

  創建DDE服務器程序時也可以再加入一個DDEServerConv部件並把兩個部件利用DDEServerItem的ServerConv屬性聯系起來此時DDE主題成為部件DDEServerConv的名稱而不是擁有DDEServerItem部件窗體的標題

  在下列情況下使用DDEServerConv部件成為必要

  擁有DDEServerItem 部件窗體的標題可能在運行時改變或可能有其它窗體擁有同樣的標題在這種情況下DDE聯接可能無法建立

  DDE客戶程序可能會向你的服務器程序發送一條宏命令在這種情況下只有擁有一個DDEServerConv部件才能響應OnMacroExecute事件並執行相應的動作

   和DDE客戶程序建立聯接

  一般說來建立DDE聯接是客戶程序的任務但服務器程序可以把一個聯接拷貝到剪貼板上供客戶程序粘貼並建立DDE會話步驟如下

  調用DDEServerItem部件的CopyToClipboard方法 把Text(或Lines)屬性的值和DDE聯接信息拷貝到剪貼板上

  DDE客戶程序插入聯接的數據一般地這是通過選擇適當的命令(如Edit|Paste Special或Edit|Paste Link)來實現的

   響應DDE事件

  部件DDEServerConv有三個事件OnOpenOnCloseOnExecuteMacro前兩個事件在DDE會話建立和終止時觸發同()中的介紹

  OnExecuteMacro事件用於響應客戶程序發送過來的宏指令OnExecuteMacro事件處理過程有一個Msg參數保存發送過來的指令串用戶可以在該過程中決定如何響應這些宏指令

  DDEServerItem部件只有一個事件OnPokeData這一事件用於響應客戶程序發送來的數據如果客戶程序是Delphi程序則客戶程序調用了PokeData或PokeDataLines方法在這一事件的處理過程中用戶可以把發送來的數據保存到一個合適的地方一般說來這應該就是DDEServerItem所聯系的文本控件

  下面的程序把發送來的數據保存到ListBox中

  procedure FormOnDDEServerItemPokeData(Serder: TObject)

  begin

  ListBoxItems := DDEServerItemLines;

  end;

   DDE服務器應用例程

  下面我們創建一個DDE服務器例程和一個相應的DDE客戶例程

  DDE服務器例程可以完成的工作有

  把DDE聯接信息拷貝到剪貼板上供其它程序使用

  利用一個TMemo部件為其它程序提供數據源

  接收客戶程序發送來的數據

  根據客戶程序發送來的宏指令改變自身的運行狀態

  其中各部件的關鍵屬性如下

  DDESrvrFormActiveControl = Memo

  DDESrvrFormMenu = MainMenu

  BevelAlign = alTop

  MemoAlign = alClient

  DDETestItemServerConv = DDETestTopic

  通過設置BevelMemo的Align屬性可以保證窗口大小變化時仍能有較為美觀的屏幕顯示

  Memo是服務器的數據源DDE項目部件DDETestItem通過Memo的OnChange事件與Memo 建立聯系

  procedure TDdeSrvrFormdoOnChange(Sender: TObject)

  begin

  if not FInPoke then

  DDETestItemLines := MemoLines;

  end;

  其中FInPoke是一個布爾類型的私有數據成員用於標志程序是否在處理客戶程序的數據發送當數據是由客戶發送過來轉存到數據源時則沒有必要再把數據傳給DDE項目部件

  把聯接信息拷貝到剪貼板只需簡單調用DDETestItem的CopyToClipboard方法

  procedure TDDESrvrFormCopyClick(Sender: TObject)

  begin

  DDETestItemCopyToClipboard;

  end;

  這是通過菜單項Edit|Copy來調用的

  接收客戶程序發送來的數據是在DDETestItem的OnPokeData事件處理過程中在接收過程中改變FInPoke的值以阻止數據的無效反送

  procedure TDDESrvrFormdoOnPoke(Sender: TObject)

  begin

  FInPoke := True;

  MemoLines := DDETestItemLines;

  FInPoke := False;

  end;

  在DDE會話部件DDETestTopic的OnExecuteMacro事件處理過程中處理客戶發送來的宏指令我們共定義了五種可以響應的宏指令CopyDDEClearWS_NormalWS_MINIMIZEDWS_MAXIMIZED分別用於拷貝聯接信息清除Memo中的內容以及改變窗口顯示狀態

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25226.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.