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

Delphi 剪貼板觀察器實戰:構建位圖自動保存工具、Windows 消息響應、DDE 原理與 Delphi 實現機制

     編輯:Delphi

剪貼板觀察器鏈消息響應

WM_CHANGECBCHAIN 消息在其他觀察器退出時觸發,根據被移除觀察器位置決定處理:

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;

界面按鈕處理

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 消息的方法(message 關鍵字),自定義組件開發將深入討論
  3. 啟示:Delphi 開發中巧妙應用傳統 Windows 方法(消息處理、API)仍屬必要,且體現 Delphi 便利性優勢

7.2 Windows DDE 原理與 Delphi 實現機制

7.2.1 Windows DDE 原理

基於 Windows 消息機制。兩應用程序通過傳遞 DDE 消息進行會話,完成數據請求/應答/傳輸。角色:服務端(數據提供者)、客戶端(請求/接收者)。會話由客戶端發起,廣播 WM_DDE_INITIATE 指明所需應用程序/主題,擁有數據的服務端響應,會話開始。請求數據時需同時指明應用程序名、主題名、項目名——DDE 三大核心概念。

直接使用 Windows DDE 消息/API 編程棘手,雖有 DDE 管理庫 (ddeml.dll) 減輕負擔,但仍不輕松。Delphi 以巧妙設計使 DDE 應用開發如同普通程序般快捷方便。

7.2.2 Delphi DDE 實現機制

四大組件封裝所有 DDE 功能:

組件用途
TDDEClientConv客戶端建立/維護 DDE 會話
TDDEClientItem客戶端建立/維護數據交換通道
TDDEServerConv服務端響應 DDE 會話
TDDEServerItem服務端維護數據交換通道

前兩者構建客戶端,後兩者構建服務端。同時擁有則雙角色兼備。

會話組件

TDDEClientConv/TDDEServerConv 處理會話,包含 DDE 服務(服務端名稱,通常為 EXE 文件名去 .EXE,如 Word 6.0 為 WINWORD,ReportSmith 為 Report Smith,以文檔為準)和 DDE 主題(包含聯接信息的數據單元,通常為帶擴展名的完整文件名,如 c:\excel\Example\sale.xls。Delphi 服務端默認主題為包含數據窗體標題,使用 DDEServerConv 時則以其名稱為主題)。

項目組件

TDDEClientItem/TDDEServerItem 處理數據傳輸通道。DDE 項目格式取決於服務端(如電子表格單元格、數據庫字段)。Delphi 服務端項目為關聯的 DDEServerItem 組件名稱。

缺陷

僅支持文本數據及命令/宏傳輸,不支持圖像數據。VB 略勝一籌,但文本數據應用最廣,圖像可用剪貼板/OLE 實現,影響有限。

7.3 DDE 客戶端程序實現

客戶端發起會話,請求/接收數據,可發送數據/命令/宏控制服務端。

7.3.1 聯接模式

DDEClientConv.ConnectMode 設置:

值含義
ddeAutomatic運行中包含組件的窗口創建時自動建立聯接
ddeManual僅調用 OpenLink 時建立聯接

自動模式開發步驟

  1. 添加 DDEClientConv、DDEClientItem 並命名
  2. 設置 DDEClientItem.DdeConv 為 DDEClientConv 名稱(設計時屬性觀察器選擇,運行時賦值字符串)
  3. 與服務端建立聯接,實現數據共享

手動模式開發步驟

  1. 添加 DDEClientConv
  2. 與服務端建立聯接
  3. 數據更新時調用 RequestData 申請獲取數據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved