程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十九章-Delphi自定義部件開發(三)(4)

第十九章-Delphi自定義部件開發(三)(4)

編輯:Delphi

③ 決定存儲什麼

用戶也可以控制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.

19.3.1.2 使控制只讀

因為這個數據日歷以只讀方式響應數據,所以用戶不能在控制中改變數據並指望它們反映到數據庫中。

使日歷只讀包含下列兩步:

● 增加只讀屬性

● 允許所需的更新

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved