TReader 提供 ReadSignature、ReadPrefix、ReadComponent、ReadComponents、ReadRootComponent 五大核心方法。
讀取 4 位元組標誌,驗證為 TPF0 (FilerSignature),否則觸發 SInvalidImage 異常。
讀取前綴位元組:高 4 位 $F 標識,低 4 位為 TFilerFlags (ffInherited、ffChildPos)。若 ffChildPos 置位,緊接讀取整數建立序號。
核心邏輯:
ReadPrefix 取得標誌與序號Component=nil:ffInherited 置位 → FindExistingComponent 尋找現有元件CreateComponent 從類別表建立新實例csLoading/csReadingSetCompName 設定名稱ReadState 讀取屬性ffChildPos 置位 → Parent.SetChildOrder 恢復建立順序FLoaded 列表批次讀取關聯元件:設定 Root/Owner/Parent,BeginReferences,迴圈 ReadSignature + ReadComponent(nil) + 處理程序,FixupReferences 解析引用,EndReferences 釋放。採 BeginReferences/FixupReferences/EndReferences 巢狀模式重建相互引用。
讀取根元件及其擁有樹:
ReadSignature 驗證標誌try...except 保護區塊ReadPrefix 取得標誌Root=nil:讀類別名建立實例,讀名稱設 Name;否則忽略類別名,設計期讀名稱,執行期呼叫 FindUniqueName 確保唯一FRoot、FLoaded (全域或新建 TList),標記 csLoading/ReadingFRoot.ReadState 讀取屬性與子元件GlobalLoaded,遍歷 FLoaded 呼叫各元件 LoadedGlobalFixupReferences 全域修正引用RemoveFixupReferences、釋放新建根元件、重拋