首頁 考試吧論壇 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ī)劃師 | 國際內審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質量工程師 | 物業(yè)管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產(chǎn)估價師 | 土地估價師 | 巖土師
設備監(jiān)理師 | 房地產(chǎn)經(jīng)紀人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > Delphi > 復習資料 > 正文

2011計算機等考Delphi:Delphi自定義部件開發(fā)

來源:考試吧Exam8.com) 2010-10-30 9:13:30 考試吧:中國教育培訓第一門戶 模擬考場
在本章中將闡述如何為Delphi應用程序編寫部件。

 �、� 存儲和裝入屬性

  Delphi將窗體及其擁有的部件存儲在窗體文件(.DFM)中,DFM文件用二進制表示窗體的屬性和它的部件。當Delphi用戶將自定義部件加入窗體中時,自定義部件應當具有存儲它們的屬性的能力。同樣,當被調入Delphi或應用程序時,部件必須能從DFM文件中恢復它們。

  在大多數(shù)時候,不需要做任何使部件讀寫DFM文件的事。存儲和裝入都是繼承的祖先部件的行為的一部分。然而在某些情況下,你可能想改變部件存儲和裝入時初始化的方法。因此,應當理解下述的機制:

  ● 存儲和裝入機制

  ● 描述缺省值

  ● 決定存儲什么

  ● 裝入后的初始化

 �、� 存儲和裝入機制

  當應用開發(fā)者設計窗體時,Delphi將窗體的描述存儲在DFM文件中。當用戶運行程序時,它讀取這些描述。

  窗體的描述包含了一系列的窗體屬性和窗體中部件的相似描述。每一個部件,包括窗體本身,負責存儲和裝入自身的描述。

  在缺省情況下,當存儲時,部件將所有public和published屬性的不同于缺省值的值以聲明的順序寫入。當裝入時,部件首先構造自己,并將所有屬性設為缺省值;然后,讀存儲的、非缺省的屬性值。

  這種缺省機制,滿足了大多數(shù)部件的需要,而又不需部件編寫者的任何工作。然而自己定義存儲和裝入過程以適合自定義部件需要的方法也有幾種。

 �、� 描述缺省值。

  Delphi部件只存儲那些屬性值不同于缺省值的屬性。如果你不描述,Delphi假設屬性沒有缺省值,這意味著部件總是存儲屬性。

  一個屬性的值沒被構造函數(shù)設置,則被假設為零值。為了描述一個缺省值,在屬性聲明后面加default指令和新的缺省值。

  你也能在重聲明屬性時描述缺省值。實際上,重聲明屬性的一個原因是指定不同的缺省值。只描述缺省值,那么在對象創(chuàng)建時并不會自動地給屬性賦值,還需要在部件的Create方法中賦所需的值。

  下面的代碼用Align屬性演示了描述缺省值的過程.

  type

  TStatusBar=class(TPanel)

  public

  constructor Create(Aowner: TComponent); override; { 覆蓋以設置新值 }

  published

  property Align default alBottom; { 重新聲明缺省值 }

  end;

  constructor TStatusBar.Create(Aowner: TComponent);

  begin

  inherited Create(Aowner); { 執(zhí)行繼承的初始化過程 }

  Align := alBottom; { 為Align賦新的缺省值 }

  end;

 �、� 決定存儲什么

  用戶也可以控制Delphi是否存儲部件的每一個屬性。缺省情況下,在對象的published部分聲明的所有屬性都被存儲。然而,可以選擇不存儲所給的屬性,或者設計一個函數(shù)在運行時決定是否存儲屬性。

  控制Delphi是否存儲屬性的方法是在屬性聲明后面加stored指令,后跟True或False,或者是布爾方法名。你可以給任何屬性的聲明或重聲明加stored表達式。下面的代碼顯示了部件聲明三種新屬性。一個屬性是總是要存儲,一個是不存,第三個則決定于布爾方法的值:

  type

  TSampleCompiment = class(TComponent)

  protected

  function storeIt: Boolean;

  public { 正常情況下在不存 }

  property Important: Integer stored True; { 總是存儲 }

  published { 正常情況下保存 }

  property UnImportant: Integer stored False; { 不存 }

  property Sometimes: Integer stored StoreIt; { 存儲依賴于函數(shù)值 }

  end;

 �、� 載入后的初始化

  在部件從存儲的描述中讀取所有的屬性后,它調用名為Loaded的虛方法,這提供了按需要執(zhí)行任何初始化的機會。調用Loaded是在窗體和它的控制顯示之前,因此,不需要擔心初始化會帶來屏幕閃爍。

  在部件載入屬性時初始化它,要覆蓋Loaded方法。

  在Loaded方法中,要做的第一件事是調用繼承的Loaded方法。這使得在你的部件執(zhí)行初始化之前,任何繼承的屬性都已初始化。

  下面的代碼來自于TDatabase部件。在裝入后,TDatabase試圖重建在它存儲時已打開的連接,并描述在連接發(fā)生異常時如何處理。

  procedure TDatabase.Loaded

  begin

  inherited Loaded; { 總是先調用繼承的方法 }

  Modified; { 設置內部標志 }

  try

  if FStreamedConnected then Open; { 重建聯(lián)接 }

  except

  if csDesigning in ComponentState then { 在設計時 }

  Application.HandleException(self) { 讓Delphi處理異常 }

  else raise; { 否 則 }

  end;

  end;

  19.3 Delphi部件編程實例

  19.3.1 創(chuàng)建數(shù)據(jù)庫相關的日歷控制-TDBCalendar

  當處理數(shù)據(jù)庫聯(lián)接時,將控制和數(shù)據(jù)直接相聯(lián)是很重要的。就是說,應用程序可以建立控制與數(shù)據(jù)庫之間的鏈。Delphi包括了數(shù)據(jù)相關的標簽、編輯框、列表框和柵格。用戶可以使自己的控制與數(shù)據(jù)相關。

  數(shù)據(jù)相關有若干等級。最簡單的是只讀數(shù)據(jù)相關或數(shù)據(jù)瀏覽,以及反映數(shù)據(jù)庫當前狀態(tài)的能力。比較復雜的是數(shù)據(jù)相關的編輯,也即用戶可以在控制上操作數(shù)據(jù)庫中的數(shù)據(jù)。

  在本部分中將示例最簡單的情況,即創(chuàng)建聯(lián)接數(shù)據(jù)庫的單個字段的只讀控制。本例中將使用Component Palette的Samples頁中的TCalendar部件。

  創(chuàng)建數(shù)據(jù)相關的日歷控制包括下列幾步:

  ● 創(chuàng)建和注冊部件

  ● 使控制只讀

  ● 增加數(shù)據(jù)聯(lián)接(Data Link)

  ● 響應數(shù)據(jù)改變

  19.3.1. 1創(chuàng)建和注冊部件

  每個部件的創(chuàng)建都從相同的方式開始,在本例中將遵循下列過程:

  ● 將部件庫單元命名為DBCal

  ● 從TCalendar繼承一個新部件,名為TDBCalendar

  ● 在Component Palette的Samples頁中注冊TDBCalendar

  下面就是創(chuàng)建的代碼:

  unit DBCal;

  interface

  uses SysUtils, WinTypes, WinProc, Messages, Classes, Graphics, Controls,

  Forms, Grids, Calendar;

  type

  TDBCalendar=class(TCalendar)

  end;

  procedure Register;

  implementation

  procedure Register;

  begin

  RegisterComponents(Samples,[TDBabendar]);

  end;

  end.

 << 上一頁  11 12 13 14 15 16 17 18 19 20  ... 下一頁  >> 
  相關推薦:2010年9月計算機等級考試試題及答案解析專題
       預告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
版權聲明:如果計算機等級考試網(wǎng)所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網(wǎng)內容,請注明出處。