熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:對象鏈接與嵌入(二)[2]

2013-11-23 17:51:11  來源: Delphi編程 

  利用OLE 程序員可以定義一組命令使它們進入到其它程序中這些命令可帶參數看起來很象應用程序在調用函數或過程一樣采用上述辦法 可以在人不參與的情況下就能使得兩個應用程序的相互作用

  被自動化的程序稱作自動化對象或自動化服務器 操作或自動化其他程序的應用程序稱為自動化控制器或自動化客戶器

  Delphi完全支持OLE的應用程序自動化可以用Delphi 編寫自動化控制器和服務

  器在應用程序之間可編程的潛能是巨大的用戶可以創建宏或者其它命令 使得某個應用程序能透過其它應用程序進行工作已經存在的應用程序的宏語言很容易被擴展它可以包括一組別的應用程序能夠執行的命令和函數調用

  現在介紹兩個應用程序其中MemoEditdpr 是多文檔界面的文本編輯器作為OLE自動化服務器AutoFromdpr是自動化控制器運行AutoForm前在Delphi集成開發環境中單擊菜單(run | parameters)Delphi彈出運行參數對話框如圖輸入參數後運行狀態如圖AutoForm窗體的多個按鈕可對MemoEdit進行操作如按Creat按鈕MemoEdit產生三個子窗體如圖AddText子窗體將出現This text was added through OLE Automation的字符串

  MemoEdit包括三個單元

  Mainfrom MDI主窗體

  EditFrom MDE子窗體和自動化類

  MemoAuto 應用程序自動化對象

  下面結合例程講述OLE自動化的基本概念及開發

   TAutoObject對象

  TAutoObject 是Delphi自動化服務器中所有對象的基類任何自動化對象都是從TAutoObject類派生出來的

  OLE對象的定義與其它類的定義類似它的automated部分象普通類的public部分OLE控制器可引用在這部分聲明的屬性和方法編譯器把automated部分創建成OLE自動化對象的入口但automated部分的代碼有很多限制

  ● 屬性方法可以定義但不能定義域

  ● 所有屬性參數函數類型必須是以下類型之一

  SmallIntIntegerSingleDoubleCurrencyTDateTimeStringWordBool Varint

  ● 屬性聲明只能包括訪問定義符(read and Write)其它定義符如indexstored

  defaultodefault均不能使用

  ● 訪問定義符必須列出相應的方法標識符不能使用域標識符

  ● 支持數組類型

  ● 不允許屬性重載

  ● 方法是可以是虛擬的但不能是動態的允許方法重載

  在EditFrom單元中定義了TMemoDoc類

  type

  TMemoDoc = Class(TAutoObject)

  private

  FEditForm : TEditForm;

  funtion CretFileName : String;

  funtion CretModiFied : WordBool;

  procedure SetFileName(Const Value : String)

  automated

  procedure Clear;

  procedure Ineart(Const Text : String)

  procedure Save;

  procedure Close;

  procedure FileName : String read GretFileName write

  SetFileName;

  procedure Modified : WordBool read GretModified

  end;

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

  unit MemoAuto

  …

  type

  TMemoApp = Class(TAutoObject)

  implementation

  …

  procedure RegisterMemoApp

  Const

  AutoClassInfo : TAutoClassInfo = (

  AutoClass : TMemoApp;

  ProgID : MemoEditApplication

  ClassIn : {FIFF D CF BDCF DAFOEB};

  Description : Memo Editor Application;

  Instancing : acSingle Instance )

  begin

  AutomationRegisterClass(AutoClassInfo)

  end;

  inibialization

  RegisterMemoApp;

  end;

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

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25216.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.