首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護士
會計從業(yè)資格考試會計證) | 經(jīng)濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務(wù)師
注冊資產(chǎn)評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內(nèi)審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價師 | 土地估價師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > Delphi > 復(fù)習(xí)資料 > 正文

2011年等考二級Delphi講義:對象鏈接與嵌入

對象鏈接和嵌入(Object Linking and Embeding)是一組服務(wù)功能,它提供了一種用源于不同應(yīng)用程序的信息創(chuàng)建復(fù)合文檔的強有力方法。

  8.3.2.2 初始化OLE包容器部件

  為了使OLE包容器部件包含OLE對象,必須對部件進行初始化。 初始化主要是定義部件的OLE類。如果定義了OLE文件和OLE項目,初始化完成后,OLE 應(yīng)用程序部件將包含OLE對象。

  調(diào)用InsertOLEObjetDlg函數(shù)可在其參數(shù)PInitInfo獲得關(guān)于OLE對象初始化的信息時,把它傳遞給OLE包容器部件的PInitInfo屬性,OLE包容部件的ObjClass,ObjDoc,ObjItem屬性將被自動定義。

  初始化完成后,OLE對象被擊活。OLE服務(wù)器將獲得控制,用戶可通過OLE服務(wù)器對OLE對象進行編輯。當(dāng)程序凍結(jié)OLE對象,OLE包容器部件將包含一幅圖像或位圖代表OLE對象。定義OLE包容器部件的AutoActive屬性可重新激活OLE對象,缺省情況下,雙擊OLE包容器部件可擊活OLE對象。

  例程中初始OLE對象的代碼如下:

  procedure TOLEObjectForm.InitializeOLEObject(Info: Pointer);

  begin

  OLEContainer.PInitInfo := Info;

  ReleaseOLEInitInfo(Info)

  end;

  該過程先將初始化指針傳給OLE包容器部件的PInitInfo屬性,而后釋放其內(nèi)存空間。

  當(dāng)用戶單擊例程中的“編輯 | 插入”菜單項,將彈出插入對象對話框,選擇對象類型后, OLE對象被激活,該過程的代碼如下:

  procedure TOLEObjectForm.InsertObject1Click(Sender: TObject);

  var

  Info: Pointer;

  begin

  if InsertOLEObjectDlg(OLEFrameForm, 0, Info) then

  InitializeOLEObject(Info);

  end;

  8.3.3 凍結(jié)OLE對象

  如果OLE對象是OLE 1.0服務(wù)器創(chuàng)建,對象將在OLE服務(wù)器中被擊活,焦點和控制移到OLE服務(wù)器中。要凍結(jié)一個由OLE 1.0創(chuàng)建的對象選擇"File | Exit"菜單項。

  如果OLE 2.0服務(wù)器支持本地激活,激活OLE對象后OLE服務(wù)器將進行菜單融合,并轉(zhuǎn)換工具條和狀態(tài)條。要凍結(jié)對象,只需在應(yīng)用程序窗體中異于OLE包容器部件的任何地方單擊鼠

  標(biāo)鍵即可。

  另一種凍結(jié)對象的方法是把OLE包容器部件的Active屬性設(shè)置成假值。在例程中,“對象|凍結(jié)”菜單項實現(xiàn)凍結(jié)功能。代碼如下:

  procedure TOLEObjectForm.Deactivate1Click(Sender: TObject);

  begin

  OLEContainer.Active := False

  end;

  8.3.4 粘貼OLE對象

  一些OLE服務(wù)器允許用戶把OLE對象復(fù)制到剪貼板,如果一個OLE對象復(fù)制到剪貼板上,OLE應(yīng)用程序可通過初始化OLE包容器部件來粘貼OLE對象。

  8.3.4.1 粘貼對話框

  把OLE對象粘貼到OLE包容器部件,要使用粘貼對話框,Delphi 中沒有粘貼對話框部件,但可用PasteSpecialDlg函數(shù)顯示粘貼對話框。

  PasteSpecialDlg 函數(shù)聲明如下:

  function PasteSpecialDlg(Form :TForm;Const First:arrang; HelpConcert: THelpCOntext;var Forrmat : Word; var Hardle : THanlle var PInitInfo :Point ) : Boolean;

  PasteSpecialDlg參數(shù)定義如下:

  參數(shù)Form是擁有粘貼對話框的窗體,應(yīng)把包含OLE包容器部件的窗體名字傳遞給Form。

  參數(shù)Format是注冊對象格式的數(shù)組,每組格式是BOLEFormat類型的數(shù)組成員。例如應(yīng)用程序可注冊兩種對象格式。為嵌入對象注冊FEmbedClipFmt ,為鏈接對象注冊FlinkClipFmt。

  BOLEFormat 聲明如下:

  BOLEFormat: Record

  fmtID : Word;

  fmtName : array[0..31] of char;

  fmtResultName : array[0..31] of char;

  fmtMediun : BOleMedium;

  fmIsLInkble : Bool;

  end;

  fmtID是對象的剪貼板格式ID號,fmtID 可以是標(biāo)準(zhǔn)的剪貼板格式:CF_TEXT,CF_BIFMAP。使用OLE 對象時, 需注冊新的剪貼板格式來處理OLE 對象。Windows的API中 的RegisterClipbordFormat函數(shù)注冊格式。

  fmtName表示是對象的名字,用以定義出現(xiàn)在粘貼對話框中列表框 內(nèi)的對象名稱。在例程中,把“%S”匹配給fmtName,OLE服務(wù)器自動地把格式化的名字代替“%S”參數(shù)。例如,如果OLE服務(wù)器是畫筆,在程序運行時“Paintbrush Picture Object”將代替“%S”。

  fmtResultName,定義出現(xiàn)在粘貼對話框中結(jié)果檢查框內(nèi)的名字。在例程中, 把“%S”傳給了fmtResultName。OLE服務(wù)器自動地把格式結(jié)果名稱代替“%S”參數(shù)。例如,如果OLE服務(wù)器是畫筆,程序運行時“Paintbrush Picture”將代替“%S”。

  fmtMedium是BOLEMedium類型,是Windows決定對象格式的數(shù)據(jù)類型。例如,OLE 聯(lián)

  接對象的格式是BOLE_MED_STREAM。OLE嵌入對象的格式是BOLE_MED_STORAGE。BOLEMedium函數(shù)可計算出需要的BOLEMedium類型。

  fmtIsLinkale決定對象格式是否可聯(lián)連。聯(lián)連對象的fmtIsLinkable為真值。嵌入對象的fmtIsLinkable為假值。

  參數(shù)HelpContext 為粘貼對話框定義在線幫助。如果應(yīng)用程序沒有在線幫助,HelpContext的值為零,對話框中將不出現(xiàn)幫助按鈕。

  參數(shù)Form用以定義剪粘板上的格式,是由PasteSpecialDlg函數(shù)進行修改。因為使用粘貼對話框時,應(yīng)用程序并不知道剪貼板的格式。因而用Format來處理剪貼板的數(shù)據(jù)。在本章例程中。 PasteSpecialDlg 函數(shù)把format 變量修改成FEmbedClipFmt 或FLinkClipFmt格式,這兩種格式是在主窗體的OnCreate事件中定義的。如果剪貼板上的數(shù)據(jù)不是OLE對象,F(xiàn)ormat將被修改成其它類型的格式,如CF_TEXT等。

  參數(shù)Landle定義剪貼板上的數(shù)據(jù)句柄。由PasteSpecialDlg函數(shù)進行修改。 當(dāng)剪貼板的數(shù)據(jù)類型不是OLE對象時,需用Handle參數(shù)訪問剪貼板數(shù)據(jù)。Handle是句柄類型。

  參數(shù)PInitInfo是一個指向OLE對象初始化結(jié)構(gòu)的指針。前面在講述初始化OLE應(yīng)用程序部件時也用到了這種指針。PasteSpecialDlg函數(shù)將修改PInitInfo指針以使其指向一個有效的數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)包括了粘貼對話框中被選中的OLE對象的初始化信息。

  下面介紹粘貼對話框中的部件。

  ● 將剪貼板上的數(shù)據(jù)插入OLE應(yīng)用程序,以實現(xiàn)對象嵌入,須選擇"Paste";

  ● 在OLE服務(wù)器資源文件與OLE應(yīng)用程序之間建立聯(lián)連,以實現(xiàn)對象聯(lián)連,須選擇: "Paste Line;

  ● 要將聞連與嵌入的對象顯示成圖標(biāo),選擇"Display As Icon"。若這個檢查框被選中,改變圖標(biāo)("Chang Icon")按鈕將顯示通過這個按鈕可改變OLE對象的缺省圖標(biāo)或標(biāo)簽。

  ● 如果數(shù)據(jù)不是注冊的格式,"Paste","Paste link"選擇鍵將變灰。 用戶無法從剪貼板上粘貼數(shù)據(jù)。在本章例程中,剪貼板上的數(shù)據(jù)只能是FEmbedClipFmt(嵌入對象) 和FlinkClipFmt(鏈接對象)。

  ● 用戶在列表框中選擇數(shù)據(jù)類型。有時數(shù)據(jù)被解釋成多種類型。例如在包含OLE服務(wù)器功能的字處理器中把文本復(fù)制到剪貼板中。應(yīng)用程序可以以文本和OLE對象兩種方式粘貼對象。列表框中出現(xiàn)的選擇項由OLE服務(wù)器決定。

  用戶在粘貼對話框中選擇OK按鈕,PasteSpecialDlg返回真值,關(guān)于OLE 應(yīng)用程序的初始化信息貯存在PInitInfo所指向的結(jié)構(gòu)中。

  8.3.4.2 在剪貼板中使用OLE對象

  要把OLE對象粘貼到OLE應(yīng)用程序中,必須用Windows的 RegisterClipboardFormat函數(shù)為鏈連對象、嵌入對象注冊兩種新的剪貼板格式。這些格式將在BOLEFormat記錄的fmtIdt域中被用到。

  本章例程中, 程序在OnCreate事件中注冊O(shè)LE對象的剪貼板格式,以下代碼是主窗體的OnCreate事件:

  procedure TOLEFrameForm.FormCreate(Sender: TObject);

  begin

  FEmbedClipFmt := RegisterClipboardFormat('Embedded Object');

  FLinkClipFmt := RegisterClipboardFormat('Link Source');

  Fmts[0].fmtId := FEmbedClipFmt;

  Fmts[0].fmtMedium := BOLEMediumCalc(FEmbedClipFmt);

  Fmts[0].fmtIsLinkable := False;

  StrPCopy(Fmts[0].fmtName, '%s');

  StrPCopy(Fmts[0].fmtResultName, '%s');

  Fmts[1].fmtId := FLinkClipFmt;

  Fmts[1].fmtMedium := BOLEMediumCalc(FLinkClipFmt);

  Fmts[1].fmtIsLinkable := True;

  StrPCopy(Fmts[1].fmtName, '%s');

  StrPCopy(Fmts[1].fmtResultName, '%s');

  RegisterFormAsOleDropTarget(Self, Fmts)

  end;

  程序傳給RegistClipBroardFormat函數(shù)一個描述格式的參數(shù),它返回一個Word類型的值。該值能唯一的辨識新注冊的格式。FEmbdeClipFmt,FlinkClipFmt 是TOLEFormat類的私有數(shù)據(jù)成員。 聲明如下:

  TYPE

  TOLEForaneForm = Class(TForm)

  …

  private

  FEmbedClipFmt: Word;

  FLinkClipFmt: Word;

  function CreateChild: TOLEObjectForm;

  public

  Fmts: array[0..1] of BOleFormat;

  end;

  在注冊剪貼板格式后, 還必須定義OLE 格式才能進行對象粘貼。 每種格式定義在BOLEFormat記錄中。 程序中可能注冊標(biāo)準(zhǔn)剪貼板格式并用這種格式進行粘貼。例如:注冊文本作為粘貼格式,將BOLEFormat記錄為fmtId域定義為CF_TEXT,fmt Medium 域定義為BOLE_MED_HGLOBOL。 BOLEMediumCalc 函數(shù)可以根據(jù)定義的剪貼板格式計算出fmtMedium值。在本章例程中,程序注冊了兩種格式,一種是鏈接OLE對象的格式,另一種是嵌入OLE對象的格式。

  BOLEFormat類型定義在BOLEDefs單元中,BOLEMediumCalc函數(shù)定義在ToCtrl單元。因此主窗中的interface部分應(yīng)加入這兩個單元。

  interface

  use…,BOLEDefs,ToCtrl,

  在粘貼OLE對象前,應(yīng)用程序必須知道在剪貼板中是否有OLE對象。

  PasteSpecialEnabled函數(shù)可判斷粘貼對話框是否有效。如果剪貼板上有Fmts定義的任何一種格式,PasteSpecialEnable將返回真值, 粘貼對話框才能成功地調(diào)用。反之調(diào)用粘貼對話框?qū)⒉话l(fā)生任何事件。

  以下代碼實現(xiàn)“編輯|粘貼”菜單項的功能:

  procedure TOLEObjectForm.PasteSpecial1Click(Sender: TObject);

  var

  ClipFmt: Word;

  DataHand: THandle;

  Info: Pointer;

  begin

  if PasteSpecialEnabled(Self, OLEFrameForm.Fmts) then

  if PasteSpecialDlg(Self, OLEFrameForm.Fmts, 0,

  ClipFmt, DataHand, Info) then

  InitializeOLEObject(Info)

  end;

  只有在粘貼對話框有效時“編輯|粘貼”菜單才有效,以下代碼實現(xiàn)此功能:

  procedure TOLEObjectForm.Edit1Click(Sender: TObject);

  begin

  PasteSpecial1.Enabled := PasteSpecialEnabled(Self, OLEFrameForm.Fmts)

  end;

上一頁  1 2 3 4 5 下一頁
  相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題
       預(yù)告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
計算機等級考試欄目導(dǎo)航
版權(quán)聲明:如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。