程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第二十章-開發Delphi對象式數據管理功能(三)(1)

第二十章-開發Delphi對象式數據管理功能(三)(1)

編輯:Delphi

20.2.1.1 TFiler對象的屬性和方法 

1. Root屬性

聲明:property Root: TComponent;

Root 屬性給Filer對象指出被讀寫的對象中哪一個對象是根或主要擁有者。RootComponent和WriteRootComponent方法在讀和寫部件及其擁有的部件前先設置Root的值。

2. Ancestor屬性

聲明:property Ancestor: TPersistent;

Ancestor屬性用於往繼承下來的窗體中寫部件,因為當寫部件時,Write對象只需要寫入與所繼承的部件不同的屬性,所以在寫之前要跟蹤每個繼承的部件,並且比較它們的屬性。

如果Ancestor為nil,就表示沒有相應的繼承的部件,Writer對象應當將部件完全寫入流。Ancestor一般為nil,只有當調用WriteDescendant和WriteDescendantRes時,才給賦值。當編寫和覆蓋DefineProperties時,必須設置Ancestor的值。

3. IgnoreChildren屬性

聲明:property Ignorechildren: Boolean;

IgnoreChildren屬性使一個Writer對象存儲部件時可以不存儲該部件擁有的部件。如果IgnoreChildren屬性為True,則Writer對象存儲部件不存它擁有的子部件。否則,Writer對象將所有其擁有的對象寫入流。

4. Create方法

聲明:constructor Create(Stream: TStream; BufSize: Cardinal);

Create方法創建一個新的Filer對象,建立它和流Stream的聯系;並且給它分配一個緩沖區Buffer。Buffer的大小由BufSize指定。

5. Defineproperty方法

聲明:procedure Defineproperty(const Name: String; ReadData: TReaderProc;

WriteData: TWriterProc; HasData: Boolean); virtual; abstract;

Defineproperty方法定義Filer對象將作為屬性存儲的數據。Name參數描述接受的屬性名,該屬性不在published部分定義。ReadData和WriteData參數指定在存取對象時讀和寫所需數據的方法。HasData參數在運行時決定了屬性是否有數據要存儲。

只有當對象有數據要存儲時,才在該對象的DefineProperties中調用DefineProperty。DefineProperties有一個Filer對象作為它的參數,調用的就是該Filer對象的DefineProperty和DefineBinaryProperty方法。當定義屬性時,Writer對象應當引用Ancestor屬性,如果該屬性非空,Writer對象應當只寫入與從Ancestor繼承的不同的屬性的值。

一個最簡單的例子是TComponent的DefineProperties方法。盡管TComponent 沒有在published中定義Left、Top屬性,但該方法存儲了部件的位置信息。

procedure TComponent.DefineProperties(Filer: TFiler);

begin

Filer.DefineProperty('Left', ReadLeft, WriteLeft, LongRec(FDesignInfo).Lo <> 0);

Filer.DefineProperty('Top', ReadTop, WriteTop, LongRec(FDesignInfo).Hi <> 0);

end;

6. DefineBinaryproperty方法

聲明:procedure DefineBinaryproperty(const Name: String;

ReadData, WriteData: TStreamProc;

HisData: Boolean); virtual; abstract;

DefineBinaryProperty方法定義Filer對象作為屬性存儲的二進制數據。Name參數描述屬性名。ReadData和WriteData參數描述所存儲的對象中讀寫所需數據的方法。HasData參數在運行時決定屬性是否有數據要存。

DefineBinaryProperty和DefineProperty方法的不同之處在於,二進制型的屬性直接用Stream對象讀寫,而不是通過Filer對象。通過ReadData和WriteData傳入的方法,直接將對象數據寫入流或從流讀出。

DefineBinaryProperty屬性用得較少。只有標准的VCL對象定義了象圖形、圖像之類的二進制屬性的部件中才用它。

7. FlushBuffer方法

聲明:procedure FlushBuffer; virtual: abstract;

FlushBuffer方法用於使Filer對象的緩沖區與相聯的Stream對象同步。對Reader對象來說,是通過重新分配緩沖區;對於Writer對象是通過寫入當前緩沖區。

FlushBuffer是一個抽象方法,TReader和TWriter都覆蓋了它,提供了具體實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved