7.1 剪貼板及其應用
本質上,剪貼板只是一個全局內存塊。當一個應用程序將數據傳送給剪貼板後,通過修改內存塊分配標志,把相關內存塊的所有權從應用程序移交給Windows自身。其它應用程序可以通過一個句柄找到這個內存塊,從而能夠從內存塊中讀取數據。這樣就實現了數據在不同應用程序間的傳輸。
剪貼板雖然功能較為簡單,且不能實現實時傳輸,但卻是更為復雜的DDE和OLE的基礎。對於一些只是偶爾需要使用其它應用程序數據的程序來說,使用剪貼板不失為一種方便、快捷的方式。
Delphi把剪貼板的大部分功能封裝到一個TClipboard類中,同時把使用頻度最高的文本傳輸功能(包括DBImage的圖像傳輸功能)置入相應部件作為部件的方法,從而使用戶可以十分方便地使用剪貼板進行編程。
7.1.1 使用剪貼板傳輸文本
剪貼板傳輸文本主要是應用如下的三個方法:CopyToClipboard、CutToClipboard 和PasteFromClipboard。包含這些方法的部件如下表所示。
表7.1 包含剪貼板方法的部件
━━━━━━━━━━━━━━━━━━━━━━━━━━━
方 法 部 件
———————————————————————————
TDBEdit TDBMemo
TDBImage
CopyToClipboard TEdit TMemo TMaskEdit
TOLEContainer
TDDEServerItem
———————————————————————————
TDBEdit TDBMemo
CutToClipboard TDBImage
TEdit TMemo TMaskEdit
———————————————————————————
TDBEdit TDBMemo
PasteFromClipboard TDBImage
TEdit TMemo TMaskEdit
━━━━━━━━━━━━━━━━━━━━━━━━━━━
除TDBImage外,其余全是有關文本的控件。
在把文本傳輸到剪貼板之前,文本必須被選中。
若選TMaskEdit的AutoSelect屬性為True,則當MaskEdit獲得輸入焦點時文本自動被選中;若選TEdit、TMemo的HideSelection屬性為True,則失去焦點時,文本選中狀態自動隱藏,重新獲得焦點時再顯示。