首页 / 软件开发 / Delphi / 第二十章-开发Delphi对象式数据管理功能(三)(6)
第二十章-开发Delphi对象式数据管理功能(三)(6)2007-05-07⑶ 部件的写入TWriter对象中与写入部件有关的方法有WriteSignature、WritePrefix、WriteComponent、WriteDescendant和WriteRootComponent。WriteSignature方法用于往流中写入Filer对象标签。procedure TWriter.WriteSignature;beginWrite(FilerSignature, SizeOf(FilerSignature));end;FilerStgnature是字符串常量,其值为“TPF0”,代表对象标签。WritePrefix方法用于在写入部件前写入ffInherited和ffChildPos标志,这些标志表示部件的继承特征和创建序值特征。procedure TWriter.WritePrefix(Flags: TFilerFlags; AChildPos: Integer);varPrefix: Byte;beginif Flags <> [] thenbeginPrefix := $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;beginInclude(Component.FComponentState, csWriting);if Assigned(FAncestorList) thenAncestor := 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);beginFRootAncestor := AAncestor;FAncestor := AAncestor;FRoot := Root;WriteSignature;WriteComponent(Root);end;方法先调用WriteSignature方法写入Filer对象标签。然后调用WriteComponent将部件Root写入流。WriteRootComponent方法则是调用WriteDescendant方法写入部件,只是将后者的Ancestor参数以nil值传入。 procedure TWriter.WriteRootComponent(Root: TComponent);beginWriteDescendent(Root, nil);end;