TReader 為可實例化的讀取型 Filer,繼承自 TFiler,新增屬性 Owner、Parent、Position,事件 OnError、OnFindMethod、OnSetName,並定義大量讀取各類資料與觸發事件的方法。
Owner 與 Parent 屬性值FlushBuffervaList/vaNull),配合迴圈讀取項目TPF0,防止讀取無效資料ffInherited/ffChildPos) 與建立序號Error 參數抑制異常protected 虛擬方法,預設回傳 False 忽略錯誤,配合 try...except 讓使用者決定是否重拋異常Handled 參數控制是否進一步處理Name 前允許修改名稱字串,觸發 OnSetNamevar Name 參數允許過濾/重命名元件(如將含「Button」者改為「PushButton」)function TReader.GetPosition: Longint;
begin Result := FStream.Position + FBufPos; end;
procedure TReader.SetPosition(Value: Longint);
begin
FStream.Position := Value;
FBufPos := 0; FBufEnd := 0;
end;
FBufPos/FBufEnd 為緩衝區內部位置。GetPosition 含緩衝區偏移,SetPosition 重置緩衝區。
所有讀取方法先呼叫 ReadValue 取得型別標誌 (TValueType),符合則讀取資料,否則觸發 PropValueError。支援:Integer (8/16/32-bit)、Boolean (型別標誌即值)、String (長度前綴)、Float (可轉換整數)、Char (特殊 vaString 長度 1)、Ident (標識符/True/False/nil)。
比對屬性名相同則執行讀取。二進制屬性建立 TMemoryStream 讀入長度與資料,再呼叫 ReadData。
同步 Reader 與串流位置:FStream.Position := FStream.Position - (FBufEnd - FBufPos),重置緩衝區指標。
ReadListBegin 檢查 vaList,ReadListEnd 檢查 vaNull,EndOfList 偵測 vaNull 並回退一位元組。內部 CheckValue 封裝檢查與錯誤觸發邏輯。