控制Delphi是否存儲屬性的方法是在屬性聲明後面加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方法中
下面的代碼來自於TDatabase部件
procedure TDatabase
begin
inherited Loaded; { 總是先調用繼承的方法 }
Modified; { 設置內部標志 }
try
if FStreamedConnected then Open; { 重建聯接 }
except
if csDesigning in ComponentState then { 在設計時 }
Application
else raise; { 否 則 }
end;
end;
當處理數據庫聯接時
數據相關有若干等級
在本部分中將示例最簡單的情況
創建數據相關的日歷控制包括下列幾步
● 創建和注冊部件
● 使控制只讀
● 增加數據聯接(Data Link)
● 響應數據改變
每個部件的創建都從相同的方式開始
● 將部件庫單元命名為DBCal
● 從TCalendar繼承一個新部件
● 在Component Palette的Samples頁中注冊TDBCalendar
下面就是創建的代碼
unit DBCal;
interface
uses SysUtils
Forms
type
TDBCalendar=class(TCalendar)
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(Samples
end;
end
因為這個數據日歷以只讀方式響應數據
使日歷只讀包含下列兩步
● 增加只讀屬性
● 允許所需的更新
給日歷控制增加只讀選項是直接過程
⑴ 增加屬性聲明和保存值的private域
type
TDBCalendar=class(TClendar)
private
FReadOnly: Boolean;
public
constructor Create (Aowner: TComponent)
published
property ReadOnly: Boolean read FReadOnly write FReadOnly default True;
end;
constructor TDBCalendar
begin
inherited Create(AOwner)
FReadOnly := True;
end;
⑵ 覆蓋SelectCell方法
function TDBCalendar
begin
if FReadOnly then
Result := False
else
Result := inherited SelectCell(Acol
end;
還要在TDBcalendar的聲明中聲明SelectCell
如果現在將Calendar加入窗體
只讀日歷使用SelectCell方法實現各種改變
可以給日歷增加一個Boolean標志
type
TDBCalendar=class(TCalendar)
private
Fupdating: Boolean;
protected
function SelectCell(Acol
public
procedure UpdateCalendar; override;
end;
function TDBCalendar
begin
if (not FUpdating) and FReadOnly then
Result := False { 如果更新則允許選擇 }
else
Result := inherited SelectCell(ACol
end;
procedure UpdateCalendar;
begin
FUpdating := True; { 將標志設為允許更新 }
try
inherited UpdateCalendar; { 象通常一樣更新 }
finally
FUpdating := False; { 總是清除標志 }
end;
end;
現在日歷仍舊不允許用戶修改
控制和數據庫的聯接是由一個名為DataLink的對象處理
一個數據相關控制擁有DataLink對象
要建立作為擁有對象的Datalink
● 聲明對象域
● 聲明訪問屬性
● 初始化DataLink
⑴ 聲明對象域
每個部件要為其擁有對象聲明一個對象域
日歷部件中DataLink的聲明如下
type
TDBCalendar = class(TSampleCalendar)
private
FDataLink: TFieldDataLink;
…
end;
⑵ 聲明訪問屬性
每一個數據相關控制有一個DataSource屬性
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25115.html