当前位置: > 编程语言 > Delphi教程 >

第二十章-开发Delphi对象式数据管理功能(三)(6)

时间:2011-11-16 | 栏目:Delphi教程 | 点击:

⑶ 部件的写入

TWriter对象中与写入部件有关的方法有WriteSignature、WritePrefix、WriteComponent、WriteDescendant和WriteRootComponent。

WriteSignature方法用于往流中写入Filer对象标签。

procedure TWriter.WriteSignature;

begin

Write(FilerSignature, SizeOf(FilerSignature));

end;

FilerStgnature是字符串常量,其值为“TPF0”,代表对象标签。

WritePrefix方法用于在写入部件前写入ffInherited和ffChildPos标志,这些标志表示部件的继承特征和创建序值特征。

procedure TWriter.WritePrefix(Flags: TFilerFlags; AChildPos: Integer);

var

Prefix: Byte;

begin

if Flags <> [] then

begin

Prefix := $F0 or Byte(Flags);

Write(Prefix, SizeOf(Prefix));

if ffChildPos in Flags then WriteInteger(AChildPos);

end;

end;

如果ffChildPos置位,则存入部件在Owner中的创建序值。更详细的信息请参阅TReader的ReadPrefix方法。

WriteComponent方法往流中写入部件。

procedure TWriter.WriteComponent(Component: TComponent);

function FindAncestor(const Name: string): TComponent;

begin

end;

begin

Include(Component.FComponentState, csWriting);

if Assigned(FAncestorList) then

Ancestor := FindAncestor(Component.Name);

Component.WriteState(Self);

Exclude(Component.FComponentState, csWriting);

end;

方法中用Component的WritState方法写入部件的属性。在写入之前将Component.FComponentState置为csWriting写入完后再将csWriting复位。

WriteDescendant是根据祖先AAncestor的情况写入部件Root。

procedure TWriter.WriteDescendent(Root: TComponent; AAncestor: TComponent);

begin

FRootAncestor := AAncestor;

FAncestor := AAncestor;

FRoot := Root;

WriteSignature;

WriteComponent(Root);

end;

方法先调用WriteSignature方法写入Filer对象标签。然后调用WriteComponent将部件Root写入流。

WriteRootComponent方法则是调用WriteDescendant方法写入部件,只是将后者的Ancestor参数以nil值传入。 

procedure TWriter.WriteRootComponent(Root: TComponent);

begin

WriteDescendent(Root, nil);

end;

您可能感兴趣的文章:

相关文章