首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 元件持久化機制深度解析:Stored 指令、Default 值、Loaded 虛擬方法與 TDBCalendar 建構全流程

     編輯:Delphi

19.3 元件持久化與初始化進階機制

① 存儲/載入機制預設行為

  • 設計期:DFM 儲存 public/published 屬性中非預設值,按宣告順序。
  • 載入期:建構物件 → 所有屬性設為預設值 → 讀取 DFM 非預設值覆蓋。
  • 無需手工代碼,繼承自 TPersistent 標準流程。

② 宣告預設值:default 指令


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 不自動賦值,必須在建構子中顯式設定;重新宣告屬性可變更繼承預設值。

③ 控制是否儲存:stored 指令


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 可基於運行狀態 (如設計期/運行期、資料庫連線狀態) 決定持久化策略。

④ 載入後初始化:Loaded 虛擬方法


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;

調用時機:視窗/控制項顯示前,無閃爍風險。適合重建連線、計算衍生屬性、啟動背景執行緒等任務。

19.3.1 TDBCalendar 完整建構路線圖

  1. 建立單元、繼承 TCalendar、註冊 Samples 頁。
  2. 實作唯讀:ReadOnly 屬性 + SelectCell 封鎖 + FUpdating 旗標保護 UpdateCalendar。
  3. 資料連結:FDataLink: TFieldDataLink 生命週期管理 + DataSource/DataField 委派屬性。
  4. 響應變更:OnDataChange → DataChange 同步 CalendarDate := Field.AsDateTime。

四步驟完成功能完整、符合 VCL 規範的資料感知唯讀日曆元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved