首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
、 存儲和裝入屬性
Delphi將窗體及其擁有的部件存儲在窗體文件(.DFM)中,DFM文件用二進制表示窗體的屬性和它的部件。當Delphi用戶將自定義部件加入窗體中時,自定義部件應當具有存儲它們的屬性的能力。同樣,當被調入Delphi或應用程序時,部件必須能從DFM文件中恢復它們。
在大多數時候,不需要做任何使部件讀寫DFM文件的事。存儲和裝入都是繼承的祖先部件的行為的一部分。然而在某些情況下,你可能想改變部件存儲和裝入時初始化的方法。因此,應當理解下述的機制:
● 存儲和裝入機制
● 描述缺省值
● 決定存儲什么
● 裝入后的初始化
① 存儲和裝入機制
當應用開發者設計窗體時,Delphi將窗體的描述存儲在DFM文件中。當用戶運行程序時,它讀取這些描述。
窗體的描述包含了一系列的窗體屬性和窗體中部件的相似描述。每一個部件,包括窗體本身,負責存儲和裝入自身的描述。
在缺省情況下,當存儲時,部件將所有public和published屬性的不同于缺省值的值以聲明的順序寫入。當裝入時,部件首先構造自己,并將所有屬性設為缺省值;然后,讀存儲的、非缺省的屬性值。
這種缺省機制,滿足了大多數部件的需要,而又不需部件編寫者的任何工作。然而自己定義存儲和裝入過程以適合自定義部件需要的方法也有幾種。
、 描述缺省值。
Delphi部件只存儲那些屬性值不同于缺省值的屬性。如果你不描述,Delphi假設屬性沒有缺省值,這意味著部件總是存儲屬性。
一個屬性的值沒被構造函數設置,則被假設為零值。為了描述一個缺省值,在屬性聲明后面加default指令和新的缺省值。
你也能在重聲明屬性時描述缺省值。實際上,重聲明屬性的一個原因是指定不同的缺省值。只描述缺省值,那么在對象創建時并不會自動地給屬性賦值,還需要在部件的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); { 執行繼承的初始化過程 }
Align := alBottom; { 為Align賦新的缺省值 }
end;
、 決定存儲什么
用戶也可以控制Delphi是否存儲部件的每一個屬性。缺省情況下,在對象的published部分聲明的所有屬性都被存儲。然而,可以選擇不存儲所給的屬性,或者設計一個函數在運行時決定是否存儲屬性。
控制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; { 存儲依賴于函數值 }
end;
、 載入后的初始化
在部件從存儲的描述中讀取所有的屬性后,它調用名為Loaded的虛方法,這提供了按需要執行任何初始化的機會。調用Loaded是在窗體和它的控制顯示之前,因此,不需要擔心初始化會帶來屏幕閃爍。
在部件載入屬性時初始化它,要覆蓋Loaded方法。
在Loaded方法中,要做的第一件事是調用繼承的Loaded方法。這使得在你的部件執行初始化之前,任何繼承的屬性都已初始化。
下面的代碼來自于TDatabase部件。在裝入后,TDatabase試圖重建在它存儲時已打開的連接,并描述在連接發生異常時如何處理。
procedure TDatabase.Loaded
begin
inherited Loaded; { 總是先調用繼承的方法 }
Modified; { 設置內部標志 }
try
if FStreamedConnected then Open; { 重建聯接 }
except
if csDesigning in ComponentState then { 在設計時 }
Application.HandleException(self) { 讓Delphi處理異常 }
else raise; { 否 則 }
end;
end;
19.3 Delphi部件編程實例
19.3.1 創建數據庫相關的日歷控制-TDBCalendar
當處理數據庫聯接時,將控制和數據直接相聯是很重要的。就是說,應用程序可以建立控制與數據庫之間的鏈。Delphi包括了數據相關的標簽、編輯框、列表框和柵格。用戶可以使自己的控制與數據相關。
數據相關有若干等級。最簡單的是只讀數據相關或數據瀏覽,以及反映數據庫當前狀態的能力。比較復雜的是數據相關的編輯,也即用戶可以在控制上操作數據庫中的數據。
在本部分中將示例最簡單的情況,即創建聯接數據庫的單個字段的只讀控制。本例中將使用Component Palette的Samples頁中的TCalendar部件。
創建數據相關的日歷控制包括下列幾步:
● 創建和注冊部件
● 使控制只讀
● 增加數據聯接(Data Link)
● 響應數據改變
19.3.1. 1創建和注冊部件
每個部件的創建都從相同的方式開始,在本例中將遵循下列過程:
● 將部件庫單元命名為DBCal
● 從TCalendar繼承一個新部件,名為TDBCalendar
● 在Component Palette的Samples頁中注冊TDBCalendar
下面就是創建的代碼:
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.
相關推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |