黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

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

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

來源:考試吧Exam8.com) 2010-10-27 14:38:26 考試吧:中國教育培訓第一門戶 模擬考場
對象鏈接和嵌入(Object Linking and Embeding)是一組服務功能,它提供了一種用源于不同應用程序的信息創(chuàng)建復合文檔的強有力方法。

  TMemeDoc類是MemoEdit程序的內(nèi)部自動化類,因此不需要注冊。外部OLE自動化控制器對它不能直接引用。如果要使外部控制器對自動化對象進行操作,則要在聲明自動化對象的單元中調(diào)用Automation. RegisterClass 進行注冊。例程MemoAuto 單元定義了TMemoApp對象并進行注冊。

  unit MemoAuto

  …

  type

  TMemoApp = Class(TAutoObject)

  implementation

  …

  procedure RegisterMemoApp

  Const

  AutoClassInfo : TAutoClassInfo = (

  AutoClass : TMemoApp;

  ProgID : MemoEdit,Application

  ClassIn : '{FIFF4880 - 200D - 11CF - BDCF - D020AFOE5B81}';

  Description : 'Memo Editor Application';

  Instancing : acSingle Instance );

  begin

  Automation,RegisterClass(AutoClassInfo)

  end;

  inibialization

  RegisterMemoApp;

  end;

  自動化對象要在initialization部分中對自動化對象進行注冊。 注冊的信息用以唯一辨識服務器對象。把一個自動化對象加入到服務器中要用到這些信息。程序一旦注冊了自動化對象,全局自動化對象將用OLE自動化API進行自動管理。

  注冊后的OLE自動化對象是引用記數(shù)的,因為對象可能被多個控制器控制。當使用完一個OLE對象,調(diào)用Release方法,Release可減少引用數(shù)目,當引用數(shù)目為零時,調(diào)用Free方法釋放對象。

  通常把OLE對象作為變體類型(variants)進行輸出,任何OLE 對象的方法和屬性必須返回一個包含OLE對象的變體類型,TAutoObject提供了一個變體類型的OLEObject屬性。控制器不能直接得到服務器中的類或指針,而是引用OLE對象的OLEObject屬性。

  例程MemoAuto單元的NewMemo函數(shù)就是通過引用OLEObject 屬性而提供引用TMemoDoc對象的接口。

  function TMemoApp,NewMemo : Variant;

  begin

  Result := MainForm,CreateMemo(' '),OleObject;

  end;

  8.4.2 創(chuàng)建OLE自動化服務器

  OLE自動化服務器是應用程序或動態(tài)鏈接庫(DLL),它可向OLE 自動化控制器輸出OLE對象。 MemoEditdpr 就是OLE 自動化服務器, 在MemoAuto 單元中注冊了MemoEdit.Appdication自動化類,所有OLE控制器均可對MemoEdit.Application進行引用。

  在Windows環(huán)境下有兩種OLE自動化服務器,進程內(nèi)服務器和進程外服務器, Delphi可創(chuàng)建這兩種服務器。

  進程內(nèi)服務器是輸出OLE自動化對象的動態(tài)鏈接庫。因為OLE自動化對象來自于DLL,

  對象是控制器程序的同一窗體進程,進程內(nèi)服務器適合于創(chuàng)建共享的程序模塊, 而這個模塊可以被用不同語言編寫的多個程序所共享。 進程內(nèi)服務器被調(diào)用時在同一地址中運行,這樣就不需要控制器進行調(diào)度,以避免處理大量的消息句柄。 進程外服務器是能輸出OLE自動化對象的應用程序。

  有些OLE自動化服務器只能創(chuàng)建和輸出一個OLE對象,有些服務器則可以處理多個OLE對象,另外一些服務器不能輸出OLE對象,只能在程序內(nèi)部使用OLE對象。 服務器與其能輸出的對象數(shù)目的關系稱為實例(instancing)。

  在創(chuàng)建OLE 自動化對象時必須定義實例, 這樣, 在創(chuàng)建一個OLE 自動化對象時,Windows就能決定是否創(chuàng)建一個新的服務器實例。表8.5列出三種實例類型。

  表8.6 實例的取值及含義

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

  instancing類型 含義

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

  internal OLE對象是應用程序的內(nèi)部對象,對象不需要注冊,外部進程不能創(chuàng)

  建此對象

  Single 每個服務器實例只能輸出一個OLE對象實例, 若控制器需要多個OLE

  對象實例,WIndows為第一個OLE對象創(chuàng)建一個服務器實例

  Multiple 一個服務器能創(chuàng)建和輸出多個OLE 對象實例, 進程內(nèi)服務器大多是

  Multiple類型

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

  每個使用OLEAuto單元的工程文件自動地擁有一個叫Automation的對象,它是非可視對象。就象Application部件擁有Delphi應用程序的一些信息一樣,Automation對象也擁有服務器的一些信息,其中最重要的是StartMode屬性和OnLastRelease事件。

  StartMode指示OLE自動化服務器打開方式打開的目的。表8.7列出StartMode四種取值。

  表8.7 StartMode 的取值及含義

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

  取值 含義

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

  SmStandAlone 用戶啟動應用程序

  SmAutomation Windows為創(chuàng)建OLE對象而啟動程序

  SmRegSever 應用程序僅為注冊一個或多個OLE對象而啟動

  SmUnregSever 應用程序僅為注銷一個或多個OLE對象而啟動

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

  當StartMode模式是SmAutomation,而用戶不再需要服務器時發(fā)生OnLastRelease 事件。此時所有OLE控制器釋放了由服務器創(chuàng)建的對象。缺省情況下,服務器關閉實例,但OnLastRelease 事件可根據(jù)實際情況是否關閉。OnLastRelease 事件可得到一個叫ShutDown的布爾型變量。把ShutDown設置成True,則在最后一個OLE對象釋放時服務器不關閉。

  無論創(chuàng)建何種自動化服務器,必須定義對控制器的界面,包括定義和注冊OLE對象,OLE自動化對象的屬性和方法。定義界面主要是為了控制器能夠引用它們。

  對已存在的自動化服務器界進行修改時,要確保向上兼容 ,不要刪去已有的屬性、方法,這樣會導致已存在的自動化控制器發(fā)生錯誤,修改服務器只能增加屬性和方法。

  創(chuàng)建OLE自動化服務器第一步是創(chuàng)建服務器自身。即創(chuàng)建能輸出OLE 對象的應用程序或動態(tài)鏈接庫。這主要取決于是創(chuàng)建進程內(nèi)服務器還是進程外服務器。

  創(chuàng)建進程內(nèi)服務器,即動態(tài)鏈接庫:

  1.創(chuàng)建動態(tài)鏈接庫;

  2.在工程文件的uses條款中加入OLEAuto單元;

  3.在DLL中輸出四個標準入口,即加入以下代碼。

  exports

  DLLGetClassObject,DLLCanUnloadNow;

  DLLRegisterServer,DLLUnregisterServer;

  以上代碼必須準確拼寫,包括大小寫。與Object Pascal的其它項目不同,這些代碼

  對大小寫敏感。

  創(chuàng)建進程外服務器:

  1.創(chuàng)建一個Delphi應用程序;

  2.在工程文件的begin之后加入以下代碼;

  if Automation,Server Registration then Exit;

  創(chuàng)建服務器之后,應該向服務器加入OLE自動化對象,這個過程大部分是自動完成的,但必須向Delphi的自動化對象專家提供必要的信息。

  把OLE自動化對象加入服務器:

  1.在Delphi集成開發(fā)環(huán)境中選擇File| New 菜單項, 并在對象集中選擇Automation

  Object,Delphi打開自動化對象專家。

  2.給自動化對象命名

  這是服務器內(nèi)部標識OLE對象的名字,必須是個有效的面象對象Pascal標識符,習慣上以T字母開頭;

  3.給OLE類命名

  該名用以外部控制器創(chuàng)建對象。當服務器在Windows中注冊OLE對象, 就以這個名字在系統(tǒng)注冊。控制器使用這個名字調(diào)用CreateOLEObject來創(chuàng)建對象。

  4.描述要輸出的對象。

  5.定義對象的實例(instancing),進程內(nèi)服務器常定義為Multiple,進程外服務器常定義為Single;

  6.選擇OK鍵完成該過程

  自動化對象專家將產(chǎn)生以下代碼:

  ● 從TAutoObject派生下來的自動化對象定義,但沒有定義任何屬性方法;

  ● 調(diào)用DelphiOLE自動化管理器的注冊代碼,管理器負責Windows中注冊服務器和對象。

  在注冊代碼中包括一個自動產(chǎn)生的ID號,這個ID號是全局唯一的,通常不要修改。每個ID號與一個OLE類名相對應,如果其中之一被改變,應用程序在使用時會發(fā)生錯誤。

  在創(chuàng)建了服務器并把OLE自動化對象加入服務器之后,控制器程序就可以對服務器進行操縱。

  8.4.3 自動化另一程序

  每個服務器在系統(tǒng)注冊中有一個叫ProgID的關鍵定,主要用以控制器辨識服務器。任何控制器可以用ProgID號來創(chuàng)建OLE對象實例。例程AutoForm是控制器程序,它在其主窗體創(chuàng)建了OLE對象實例。

  procedure TMainForm.FormCreate(Sender : TObject);

  begin

  try

  MemoEdit := CreateOleObject('MemoEdit.Application');

  except

  MessageDlg(

  'An instance of the "MemoEdit Application"OLE Automation Class could

  not be created,Make sure that the MemoEdit application has been registered

  using a "MemoEdit|regserver"command line',

  mtError,[mbok],0)

  Halt;

  end;

  end;

  控制器創(chuàng)建了OLE自動化對象實例后,可對其進行操縱。OLE自動對象包括屬性和方法,雖然OLE自動化對象與面向?qū)ο驪ascal中的對象不是同一概念,但Delphi允許使用與類似的語法對OLE對象的方法進行調(diào)用。

  AutoForm的很多過程引用了OLE自動化對象的方法:

  procedure TMainForm,TileButtonClick(Sender : Tobject);

  begin

  MemoEdit,TileWindow;

  end;

  其中TileWindows是OLE對象TMemoApp中定義的方法。

  AutoForm還通過TMemoApp的NewMemo方法獲得了對服務器內(nèi)部OLE對象TMemoDoc 的引用。

  procedure TMainForm,CreateButtonClick(Sender : TObject);

  var

  I : Integer;

  begin

  CloseMemo

  for I := 1 to 3 do Memos[2] := MemoEdit.NewMemo;

  end;

  其中NewMemo在MemoAuto單元中定義如下:

  function IMemoApp.NewMemo : Variant;

  begin

  Result := MainForm,CreateMemo(' '),OleObject;

  end;

  控制器在獲得服務器的內(nèi)部OLE對象后,可以引用其方法:

  procedure TMainForm.AddTextButtonClick(Sender,TObject);

  var

  I : Integer;

  begin

  for I := 1 to 3 do

  if not var IsEmpty(Memo[I]) then

  Memo[I],Insert{'This text was added through OLE Automation'#13#10);

  end;

  Insert是TMemoDoc中定義的方法,用以在子窗體中插入字符串。

上一頁  1 2 3 4 5  下一頁
  相關推薦:2010年9月計算機等級考試試題及答案解析專題
       預告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
版權聲明:如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。
主站蜘蛛池模板: 成人网在线 | 欧美一级在线免费观看 | 丁香婷婷激情网 | bl浪荡受高h合集 | 日本免费观看95视频网站 | 99在线公开免费视频 | 国产日韩第一页 | 欧美成人免费一级人片 | 亚洲国产成人久久综合一区 | www视频在线播放 | 日日夜夜草 | 色黄在线| 羞羞视频免费观看网站 | 久久精品全国免费观看国产 | 免费在线一级毛片 | 国产精品亚洲日日摸夜夜添 | 欧美日韩国产高清 | 日本大学生xxxx视频 | 日本一区二区免费在线观看 | 丁香婷婷色综合 | 天天操夜夜欢 | 国产日韩亚洲欧洲一区二区三区 | 天堂在线视频 | 国产草莓视频入口免费网站 | 在线看日韩 | 成人短视频视频在线观看网站 | 久久国产精品永久免费网站 | 欧美日韩亚洲一区二区 | 久久夜色视频 | 成年黄网站色视频免费观看 | 性freexxxxhd欧美在线 | 全黄性 | 高清色黄毛片一级毛片 | 在线观看深夜观看网站免费 | 夜夜做日日做夜夜爽 | 日韩黄色中文字幕 | 曰韩毛片| 日韩视频一 | 在线免费观看日韩视频 | 国产成人精品亚洲一区 | 在线免费观看www视频 |