fmtName表示是對象的名字用以定義出現在粘貼對話框中列表框 內的對象名稱在例程中把%S匹配給fmtNameOLE服務器自動地把格式化的名字代替%S參數例如如果OLE服務器是畫筆在程序運行時Paintbrush Picture Object將代替%S
fmtResultName定義出現在粘貼對話框中結果檢查框內的名字在例程中 把%S傳給了fmtResultNameOLE服務器自動地把格式結果名稱代替%S參數例如如果OLE服務器是畫筆程序運行時Paintbrush Picture將代替%S
fmtMedium是BOLEMedium類型是Windows決定對象格式的數據類型例如OLE 聯
接對象的格式是BOLE_MED_STREAMOLE嵌入對象的格式是BOLE_MED_STORAGEBOLEMedium函數可計算出需要的BOLEMedium類型
fmtIsLinkale決定對象格式是否可聯連聯連對象的fmtIsLinkable為真值嵌入對象的fmtIsLinkable為假值
參數HelpContext 為粘貼對話框定義在線幫助如果應用程序沒有在線幫助HelpContext的值為零對話框中將不出現幫助按鈕
參數Form用以定義剪粘板上的格式是由PasteSpecialDlg函數進行修改因為使用粘貼對話框時應用程序並不知道剪貼板的格式因而用Format來處理剪貼板的數據在本章例程中 PasteSpecialDlg 函數把format 變量修改成FEmbedClipFmt 或FLinkClipFmt格式這兩種格式是在主窗體的OnCreate事件中定義的如果剪貼板上的數據不是OLE對象Format將被修改成其它類型的格式如CF_TEXT等
參數Landle定義剪貼板上的數據句柄由PasteSpecialDlg函數進行修改 當剪貼板的數據類型不是OLE對象時需用Handle參數訪問剪貼板數據Handle是句柄類型
參數PInitInfo是一個指向OLE對象初始化結構的指針前面在講述初始化OLE應用程序部件時也用到了這種指針PasteSpecialDlg函數將修改PInitInfo指針以使其指向一個有效的數據結構該結構包括了粘貼對話框中被選中的OLE對象的初始化信息
下面介紹粘貼對話框中的部件
● 將剪貼板上的數據插入OLE應用程序以實現對象嵌入須選擇Paste;
● 在OLE服務器資源文件與OLE應用程序之間建立聯連以實現對象聯連須選擇 Paste Line;
● 要將聞連與嵌入的對象顯示成圖標選擇Display As Icon若這個檢查框被選中改變圖標(Chang Icon)按鈕將顯示通過這個按鈕可改變OLE對象的缺省圖標或標簽
● 如果數據不是注冊的格式PastePaste link選擇鍵將變灰 用戶無法從剪貼板上粘貼數據在本章例程中剪貼板上的數據只能是FEmbedClipFmt(嵌入對象) 和FlinkClipFmt(鏈接對象)
● 用戶在列表框中選擇數據類型有時數據被解釋成多種類型例如在包含OLE服務器功能的字處理器中把文本復制到剪貼板中應用程序可以以文本和OLE對象兩種方式粘貼對象列表框中出現的選擇項由OLE服務器決定
用戶在粘貼對話框中選擇OK按鈕PasteSpecialDlg返回真值關於OLE 應用程序的初始化信息貯存在PInitInfo所指向的結構中
在剪貼板中使用OLE對象
要把OLE對象粘貼到OLE應用程序中必須用Windows的 RegisterClipboardFormat函數為鏈連對象嵌入對象注冊兩種新的剪貼板格式這些格式將在BOLEFormat記錄的fmtIdt域中被用到
本章例程中 程序在OnCreate事件中注冊OLE對象的剪貼板格式以下代碼是主窗體的OnCreate事件
procedure TOLEFrameFormFormCreate(Sender: TObject)
begin
FEmbedClipFmt := RegisterClipboardFormat(Embedded Object)
FLinkClipFmt := RegisterClipboardFormat(Link Source)
Fmts[]fmtId := FEmbedClipFmt;
Fmts[]fmtMedium := BOLEMediumCalc(FEmbedClipFmt)
Fmts[]fmtIsLinkable := False;
StrPCopy(Fmts[]fmtName %s)
StrPCopy(Fmts[]fmtResultName %s)
Fmts[]fmtId := FLinkClipFmt;
Fmts[]fmtMedium := BOLEMediumCalc(FLinkClipFmt)
Fmts[]fmtIsLinkable := True;
StrPCopy(Fmts[]fmtName %s)
StrPCopy(Fmts[]fmtResultName %s)
RegisterFormAsOleDropTarget(Self Fmts)
end;
程序傳給RegistClipBroardFormat函數一個描述格式的參數它返回一個Word類型的值該值能唯一的辨識新注冊的格式FEmbdeClipFmtFlinkClipFmt 是TOLEFormat類的私有數據成員 聲明如下
TYPE
TOLEForaneForm = Class(TForm)
…
private
FEmbedClipFmt: Word;
FLinkClipFmt: Word;
function CreateChild: TOLEObjectForm;
public
Fmts: array[] of BOleFormat;
end;
在注冊剪貼板格式後 還必須定義OLE 格式才能進行對象粘貼 每種格式定義在BOLEFormat記錄中 程序中可能注冊標准剪貼板格式並用這種格式進行粘貼例如注冊文本作為粘貼格式將BOLEFormat記錄為fmtId域定義為CF_TEXTfmt Medium 域定義為BOLE_MED_HGLOBOL BOLEMediumCalc 函數可以根據定義的剪貼板格式計算出fmtMedium值在本章例程中程序注冊了兩種格式一種是鏈接OLE對象的格式另一種是嵌入OLE對象的格式
[] [] [] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25222.html