📄 053.htm
字号:
<p>begin</p><p>if Value then</p><p>WriteValue(vaTrue) else</p><p>WriteValue(vaFalse);</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> 与其它数据类型不同的是布尔型数据只使用了标志位是存储布尔值,在标志位后没有数据。</p><p> </font><font face="Arial">WriteFloat</font><font face="宋体" lang="ZH-CN">方法用于写入浮点型数据。</p><p> </p><p></font><font face="Arial">procedure TWriter.WriteFloat(Value: Extended);</p><p>begin</p><p>WriteValue(vaExtended);</p><p>Write(Value, SizeOf(Extended));</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> 字符串“</font><font face="Arial">True</font><font face="宋体" lang="ZH-CN">”、“</font><fontface="Arial">False</font><font face="宋体" lang="ZH-CN">”和“</font><fontface="Arial">nil</font><font face="宋体" lang="ZH-CN">”作为标识符传入是由于</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">的特殊需要。如果是“</font><fontface="Arial">True</font><font face="宋体" lang="ZH-CN">”、“</font><fontface="Arial">False</font><font face="宋体" lang="ZH-CN">”和“</font><fontface="Arial">nil</font><font face="宋体" lang="ZH-CN">”则写入</font><fontface="Arial">VaTrue</font><font face="宋体" lang="ZH-CN">、</font><font face="Arial">VaFalse</font><fontface="宋体" lang="ZH-CN">和</font><font face="Arial">VaNil</font><font face="宋体"lang="ZH-CN">,否则写入</font><font face="Arial">VaIdent</font><font face="宋体"lang="ZH-CN">标志,接着以字符串形式写入标识符。</p><p> </font><font face="Arial">WriteString</font><font face="宋体" lang="ZH-CN">方法用于写入字符串</p><p> </p><p></font><font face="Arial">procedure TWriter.WriteString(const Value: string);</p><p>var</p><p>L: Integer;</p><p>begin</p><p>L := Length(Value);</p><p>if L <= 255 then</p><p>begin</p><p>WriteValue(vaString);</font><font face="宋体" lang="ZH-CN"></p><p></font><font face="Arial">Write(L, SizeOf(Byte));</font><font face="宋体"lang="ZH-CN"></p><p></font><font face="Arial">end else</p><p>begin</p><p>WriteValue(vaLString);</p><p>Write(L, SizeOf(Integer));</p><p>end;</p><p>Write(Pointer(Value)^, L);</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> </font><font face="Arial">Delphi</font><font face="宋体" lang="ZH-CN">的字符串类型有两种。一种长度小于</font><fontface="Arial">256</font><font face="宋体" lang="ZH-CN">个字节,另一种长度小于</font><fontface="Arial">65536 </font><font face="宋体" lang="ZH-CN">个字节。</font><fontface="Arial">WriteString</font><font face="宋体" lang="ZH-CN">方法区分这两类情况存储字符串,一种设置</font><fontface="Arial">VaStirng</font><font face="宋体" lang="ZH-CN">标志,另一种设置</font><fontface="Arial">VaLString</font><font face="宋体" lang="ZH-CN">。然后存储字符串的长度值,最后存储字符串数据。</p><p> </font><font face="Arial">WriteChar</font><font face="宋体" lang="ZH-CN">方法用于写入字符。</p><p> </p><p></font><font face="Arial">procedure TWriter.WriteChar(Value: Char);</p><p>begin</p><p>WriteString(Value);</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> 字符类型的读写是用读写字符串的方法,在读的时候,判断字节数为</font><fontface="Arial">1</font><font face="宋体" lang="ZH-CN">时,则为字符型。</p><p> ⑶</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">部件的写入</p><p> </font><font face="Arial">TWriter</font><font face="宋体" lang="ZH-CN">对象中与写入部件有关的方法有</font><fontface="Arial">WriteSignature</font><font face="宋体" lang="ZH-CN">、</font><fontface="Arial">WritePrefix</font><font face="宋体" lang="ZH-CN">、</font><fontface="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">、</font><fontface="Arial">WriteDescendant</font><font face="宋体" lang="ZH-CN">和</font><fontface="Arial">WriteRootComponent</font><font face="宋体" lang="ZH-CN">。</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial">WriteSignature</font><fontface="宋体" lang="ZH-CN">方法用于往流中写入</font><font face="Arial">Filer</font><fontface="宋体" lang="ZH-CN">对象标签。</p><p> </p><p></font><font face="Arial">procedure TWriter.WriteSignature;</p><p>begin</p><p>Write(FilerSignature, SizeOf(FilerSignature));</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> </font><font face="Arial">FilerStgnature</font><font face="宋体" lang="ZH-CN">是字符串常量,其值为“</font><fontface="Arial">TPF0</font><font face="宋体" lang="ZH-CN">”,代表对象标签。</p><p> </font><font face="Arial">WritePrefix</font><font face="宋体" lang="ZH-CN">方法用于在写入部件前写入</font><fontface="Arial">ffInherited</font><font face="宋体" lang="ZH-CN">和</font><fontface="Arial">ffChildPos</font><font face="宋体" lang="ZH-CN">标志,这些标志表示部件的继承特征和创建序值特征。</p><p> </p><p></font><font face="Arial">procedure TWriter.WritePrefix(Flags: TFilerFlags; AChildPos:Integer);</p><p>var</p><p>Prefix: Byte;</p><p>begin</p><p>if Flags <> [] then</p><p>begin</p><p>Prefix := $F0 or Byte(Flags);</p><p>Write(Prefix, SizeOf(Prefix));</p><p>if ffChildPos in Flags then WriteInteger(AChildPos);</p><p>end;</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> 如果</font><font face="Arial">ffChildPos</font><font face="宋体" lang="ZH-CN">置位,则存入部件在</font><fontface="Arial">Owner</font><font face="宋体" lang="ZH-CN">中的创建序值。更详细的信息请参阅</font><fontface="Arial">TReader</font><font face="宋体" lang="ZH-CN">的</font><font face="Arial">ReadPrefix</font><fontface="宋体" lang="ZH-CN">方法。</p><p> </font><font face="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">方法往流中写入部件。</p><p> </p><p></font><font face="Arial">procedure TWriter.WriteComponent(Component: TComponent);</font><fontface="宋体" lang="ZH-CN"></p><p> </p><p></font><font face="Arial">function FindAncestor(const Name: string): TComponent;</p><p>begin</p><p></font><font face="宋体" lang="ZH-CN">…</p><p></font><font face="Arial">end;</p><p> </p><p>begin</p><p>Include(Component.FComponentState, csWriting);</p><p>if Assigned(FAncestorList) then</p><p>Ancestor := FindAncestor(Component.Name);</p><p>Component.WriteState(Self);</p><p>Exclude(Component.FComponentState, csWriting);</p><p>end;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p> 方法中用</font><font face="Arial">Component</font><font face="宋体"lang="ZH-CN">的</font><font face="Arial">WritState</font><font face="宋体" lang="ZH-CN">方法写入部件的属性。在写入之前将</font><fontface="Arial">Component.FComponentState</font><font face="宋体" lang="ZH-CN">置为</font><fontface="Arial">csWriting</font><font face="宋体" lang="ZH-CN">写入完后再将</font><fontface="Arial">csWriting</font><font face="宋体" lang="ZH-CN">复位。</p><p> </font><font face="Arial">WriteDescendant</font><font face="宋体" lang="ZH-CN">是根据祖先</font><fontface="Arial">AAncestor</font><font face="宋体" lang="ZH-CN">的情况写入部件</font><fontface="Arial">Root</font><font face="宋体" lang="ZH-CN">。</p><p> </p><p></font><font face="Arial">procedure TWriter.WriteDescendent(Root: TComponent;AAncestor: TComponent);</p><p>begin</p><p>FRootAncestor := AAncestor;</p><p>FAncestor := AAncestor;</p><p>FRoot := Root;</p><p>WriteSignature;</p><p>WriteComponent(Root);</p><p>end;</p><p></font> <font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">方法先调用</font><font face="Arial">WriteSignature</font><fontface="宋体" lang="ZH-CN">方法写入</font><font face="Arial">Filer</font><fontface="宋体" lang="ZH-CN">对象标签。然后调用</font><font face="Arial">WriteComponent</font><fontface="宋体" lang="ZH-CN">将部件</font><font face="Arial">Root</font><fontface="宋体" lang="ZH-CN">写入流。</p><p> </font><font face="Arial">WriteRootComponent</font><font face="宋体"lang="ZH-CN">方法则是调用</font><font face="Arial">WriteDescendant</font><fontface="宋体" lang="ZH-CN">方法写入部件,只是将后者的</font><fontface="Arial">Ancestor</font><font face="宋体" lang="ZH-CN">参数以</font><fontface="Arial">nil</font><font face="宋体" lang="ZH-CN">值传入。 </p><p></font><font face="Arial">procedure TWriter.WriteRootComponent(Root: TComponent);</p><p>begin</p><p>WriteDescendent(Root, nil);</p><p>end;</font></p><hr width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%" ><strong><A HREF="054.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="052.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -