程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第七章-剪貼板和動態數據交換(一)(5)

第七章-剪貼板和動態數據交換(一)(5)

編輯:Delphi

消息響應過程WMChangeCBChain在剪貼板觀察器鏈上其它觀察器退出時被調用。根據被移出觀察器的不同位置決定了不同的處理方法。

procedure TClipSaveForm.WMChangeCBChain(var Msg: TWMChangeCBChain);

begin

if Msg.Remove = NextViewerHandle then

NextViewerHandle := Msg.Next

else

if NextViewerHandle <> 0 then

SendMessage(NextViewerHandle,Msg.Msg,Msg.Remove,Msg.Next);

Msg.Result := 0;

end;

窗口上有兩個加速按鈕,兩個按鈕。它們擊鍵(click)事件處理過程如下。每一程序段的意義是非常顯然的。 

procedure TClipSaveForm.Button1Click(Sender: TObject);

begin

Close;

end;

procedure TClipSaveForm.Button2Click(Sender: TObject);

begin

WindowState := wsMinimized;

end;

procedure TClipSaveForm.SpeedButton1Click(Sender: TObject);

begin

View := True;

Image1.Picture.Bitmap := MyBitmap;

end; 

procedure TClipSaveForm.SpeedButton2Click(Sender: TObject);

begin

View := False;

Image1.Picture.Bitmap := nil;

end; 

通過對這個程序的介紹,以下幾點是應該注意的:

1.提供了一種自己截獲和處理剪貼板上內容的方法。讀者可以根據需要進一步擴充;

2.提供了響應Windows消息的方法。在第三篇有關自定義部件開發的內容中,這一問題還要詳細論述;

3.最後的一點啟示是:在Delphi程序開發中巧妙應用傳統的Windows方法(如消息處理、 API函數等)仍是很有必要的。而在應用這些方法中所體現的方便之處,正是Delphi勝過其它可視化開發工具的一個重要方面。 

7.2 Windows的DDE原理和 Dephi的DDE實現機制 

7.2.1 Windows的DDE原理 

Windows的DDE機制基於Windows的消息機制。兩個Windows應用程序通過相互之間傳遞DDE消息進行DDE會話(Conversation),從而完成數據的請求、應答、傳輸。這兩個應用程序分別稱為服務器(Server)和客戶(Client)。服務器是數據的提供者,客戶是數據的請求和接受者。

DDE會話由客戶程序啟動。客戶程序把一條消息(WM_DDE_INITIATE)傳播給當前運行的所有Windows程序。這條消息指明了客戶程序所需要的一般數據(應用程序、主題)。擁有這些數據的DDE服務器可以響應這條被傳播的消息。此時,DDE會話就開始了。

由於在每個主題中,DDE服務器可以支持一個或多個數據項,所以在客戶請求數據時應同時指明應用程序名、主題名和項目名。應用程序、主題、項目是DDE中三個最基本的概念。

利用Windows本身提供的DDE消息和API進行DDE編程是一件相當棘手的問題。 雖然使用DDE管理庫(ddeml.dll)可以一定程度上減輕開發者的工作負擔,但開發DDE程序仍不是一件輕松的事情。

此時Delphi出現了!Delphi通過其自身巧妙的設計使開發一個DDE應用程序同開發一個普通程序一樣地快捷、方便。 

7.2.2 Delphi的DDE實現機制簡介 

Delphi把所有的DDE功能做到四個部件中,它們是:

● TDDEClientConv : 用於客戶程序建立和維護一個DDE會話

● TDDEClientItem : 用於客戶程序建立和維護數據交換通道

● TDDEServerConv : 用於服務器程序響應DDE會話

● TDDEServerItem : 用於服務器程序維護數據交換通道 

  前兩個部件用於生成一個DDE客戶程序,後兩個部件用於生成一個DDE服務器程序。如果一個應用程序同時擁有這些部件,則這一程序既可以充當DDE客戶,也可以充當DDE服務器。

會話部件TDDEClientConv、TDDEServerConv用於建立和維護一個DDE會話。DDE會話包括DDE服務和DDE主題兩部分。

DDE服務是DDE服務器的名稱,即在一般的Windows DDE機制中所講的應用程序名。一般說來這一名稱是DDE服務器應用程序執行文件名去掉 .EXE後綴。比如你的應用程序要和Word 6.0建立會話,則DDE服務為WINWORD。但也不盡然。比如你的應用程序要和Borland ReportSmith ( RPTSMITH.EXE ) 建立會話,則DDE 服務為 Report Smith。DDE服務到底如何,讀者可參看相關的DDE服務器應用程序文檔。

DDE主題是一個包含了聯接信息的數據單元。一般說來DDE 主題是一個包括擴展名的完整文件名。例如和Excel中的一個文件建立DDE會話,則主題可能是 

Topic = 'c:\excel\Example\sale.xls' 

如果服務器是一個Delphi應用程序,缺省情況下主題是包含欲聯接數據窗體的標題。如果服務器使用了DDEServerConv部件,則要求使用部件DDEServerConv的名稱作為DDE主題。

項目部件TDDEclientItem、TDDEServerItem用於建立和維護DDE數據的傳輸通道。 DDE項目中包含著實際欲傳輸的數據。DDE項目的格式取決於DDE服務器應用程序。一個可能的DDE項目例子是電子表格中的單元和數據庫表中的域。如果服務器是Delphi應用程序,則項目是連接的 DDEServerItem部件的名稱。

Delphi的DDE實現機制方便、實用,但也有一個令人遺憾的缺陷:只能傳輸文本數據以及命令、宏,而不能傳輸圖像數據。在這一點上微軟公司推出的Visual Basic 要略勝一籌。不過在目前文本數據的使用仍是最廣泛的,而且圖像傳輸可以利用剪貼板和OLE來實現,則這一缺陷也並無很大的影響 

7.3 DDE客戶程序的實現

DDE客戶程序啟動DDE會話,向服務器請求並從服務器接收數據。同時還可以向服務器發送數據、命令、宏,改變服務器的狀態並控制服務器的運行。 

7.3.1 聯接模式(ConnectMode)

Delphi的DDE提供了兩種聯接模式:自動和人工。這可以通過DDEClinetConv 部件的ConnectMode屬性進行設置。如下表所示。 

表 7.5 DDE的聯接模式

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   值           意      義

───────────────────────────────

 ddeAutomatic 在運行中當包含TDDEClientConv部件的窗口創建時

聯接自動建立

ddeManual 只有當調用OpenLink方法時聯接才建立

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   

不同聯接模式,DDE客戶程序的實現方式不同。

對於自動模式:

1. 向窗體中加入DDEClientConv和DDEClientItem部件並命名;

2. 把DDEClientItem部件的DdeConv屬性設置為DDEClientConv部件的名稱;

如果在設計時建立,則通過對象觀察器進行選擇;如果在運行時建立聯系,則通過如下的一條語句設置屬性的值: 

DDEClientItem1.DdeConv := 'DDEClientConv1' ; 

3. 和服務器建立聯系,實現數據共享。

對於人工模式:

1.向窗體中加入DDEClientConv部件;

2.和服務器建立聯系;

3. 數據更新時調用RequestData方法申請並獲得數據。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved