public/published 屬性中非預設值,按宣告順序。TPersistent 標準流程。
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; // 實際賦值,default 指令僅影響 DFM 儲存判斷
end;
關鍵: default 不自動賦值,必須在建構子中顯式設定;重新宣告屬性可變更繼承預設值。
type
TSampleComponent = class(TComponent)
protected
function StoreIt: Boolean;
published
property Important: Integer stored True; // 強制儲存
property UnImportant: Integer stored False; // 永不儲存
property Sometimes: Integer stored StoreIt; // 運行期動態決定
end;
StoreIt 可基於運行狀態 (如設計期/運行期、資料庫連線狀態) 決定持久化策略。
procedure TDatabase.Loaded;
begin
inherited Loaded; // 必須優先調用,確保繼承屬性就緒
Modified; // 設定內部標記
try
if FStreamedConnected then Open; // 重建設計期開啟的連線
except
if csDesigning in ComponentState then
Application.HandleException(Self) // 設計期交給 IDE 處理
else raise; // 運行期拋出
end;
end;
調用時機:視窗/控制項顯示前,無閃爍風險。適合重建連線、計算衍生屬性、啟動背景執行緒等任務。
TCalendar、註冊 Samples 頁。ReadOnly 屬性 + SelectCell 封鎖 + FUpdating 旗標保護 UpdateCalendar。FDataLink: TFieldDataLink 生命週期管理 + DataSource/DataField 委派屬性。OnDataChange → DataChange 同步 CalendarDate := Field.AsDateTime。四步驟完成功能完整、符合 VCL 規範的資料感知唯讀日曆元件。