⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 051.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
face="Arial">Classes</font><font face="宋体" lang="ZH-CN">库单元中也包含一个名为</font><fontface="Arial">ReadComponentRes</font><font face="宋体" lang="ZH-CN">的函数,该函数执行相同的操作,只不过它基于应用程序包含的资源建立自己的流。</p><p>  </font><font face="Arial">8. ReadResHeader</font><font face="宋体" lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">procedure ReadResHeader; </p><p>ReadResHeader</font><font face="宋体" lang="ZH-CN">方法从流的当前位置读取</font><fontface="Arial">Windows</font><font face="宋体" lang="ZH-CN">资源文件头,并将流的当前位置指针移到该文件头的尾部。如果流不包含一个有效的资源文件头,</font><fontface="Arial">ReadResHeader</font><font face="宋体" lang="ZH-CN">将引发一个</font><fontface="Arial">EInvalidImage</font><font face="宋体" lang="ZH-CN">异常事件。</p><p>  流的</font><font face="Arial">ReadComponentRes</font><font face="宋体"lang="ZH-CN">方法在从资源文件中读取部件之前,会自动调用</font><fontface="Arial">ReadResHeader</font><font face="宋体" lang="ZH-CN">方法,因此,通常程序员通常不需要自己调用它。</p><p>  </font><font face="Arial">9. Seek</font><font face="宋体" lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">function Seek(Offset: Longint; Origin: Word):Longint; virtual; abstract; </p><p>Seek</font><font face="宋体" lang="ZH-CN">方法将流的当前指针移动</font><fontface="Arial">Offset</font><font face="宋体" lang="ZH-CN">个字节,字节移动的起点由</font><fontface="Arial">Origin</font><font face="宋体" lang="ZH-CN">指定。如果</font><fontface="Arial">Offset</font><font face="宋体" lang="ZH-CN">是负数,</font><fontface="Arial">Seek</font><font face="宋体" lang="ZH-CN">方法将从所描述的起点往流的头部移动。下表中列出了</font><fontface="Arial">Origin</font><font face="宋体" lang="ZH-CN">的不同取值和它们的含义:</p><p> </font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">表</font><font face="Arial">20.1 </font><fontface="宋体" lang="ZH-CN">函数</font><font face="Arial">Seek</font><font face="宋体"lang="ZH-CN">的参数的取值</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>  常量       值  </font> <font face="宋体" lang="ZH-CN">   </font><fontface="Arial">Seek</font><font face="宋体" lang="ZH-CN">的起点</font> <fontface="Arial">Offset</font><font face="宋体" lang="ZH-CN">的取值</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN">─────────────────────────────────</p><p> </font><font face="Arial">SoFromBeginning 0 </font><font face="宋体" lang="ZH-CN"> 流的开头</font><font face="宋体" lang="ZH-CN">正</font> <font face="宋体" lang="ZH-CN">数</p><p> </font><font face="Arial">SoFromCurrent 1 </font><font face="宋体" lang="ZH-CN">流的当前位置</font><font face="宋体" lang="ZH-CN">正数或负数</font> <font face="宋体" lang="ZH-CN"></p><p> </font><font face="Arial">SoFromEnd 2 </font><font face="宋体" lang="ZH-CN">流的结尾</font><font face="宋体" lang="ZH-CN">负</font> <font face="宋体" lang="ZH-CN">数</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font><fontface="Arial"></p><p></font> <font face="宋体" lang="ZH-CN"></p><p> </font> <font face="Arial">10. Write</font><font face="宋体" lang="ZH-CN">方法</p><p>  在</font><font face="Arial">Delphi</font><font face="宋体" lang="ZH-CN">对象式管理的对象中有两类对象的方法都有称为</font><fontface="Arial">Write</font><font face="宋体" lang="ZH-CN">的:</font><font face="Arial">Stream</font><fontface="宋体" lang="ZH-CN">对象和</font><font face="Arial">Filer</font><fontface="宋体" lang="ZH-CN">对象。</font><font face="Arial">Stream</font><fontface="宋体" lang="ZH-CN">对象的</font><font face="Arial">Write</font><fontface="宋体" lang="ZH-CN">方法将数据写进流中。</font><font face="Arial">Filer</font><fontface="宋体" lang="ZH-CN">对象通过相关的流传递数据,在后文中会介绍这类方法。</p><p>  </font><font face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的</font><fontface="Arial">Write</font><font face="宋体" lang="ZH-CN">方法声明如下:</p><p> </font><font face="Arial"></p><p>function Write(const Buffer; Count: Longint): Longint; virtual; abstract; </p><p></font> <font face="Arial"></p><p>Write</font><font face="宋体" lang="ZH-CN">方法将</font><font face="Arial">Buffer</font><fontface="宋体" lang="ZH-CN">中的</font><font face="Arial">Count</font><font face="宋体"lang="ZH-CN">个字节写入流中,并将当前位置指针向流的尾部移动</font><fontface="Arial">Count</font><font face="宋体" lang="ZH-CN">个字节,函数返回写入的字节数。</p><p> </font> <font face="Arial">TStream</font><font face="宋体" lang="ZH-CN">的</font><fontface="Arial">Write</font><font face="宋体" lang="ZH-CN">方法是抽象的,每个继承的</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象都要通过覆盖该方法来提供向特定存储媒介</font><fontface="Arial">(</font><font face="宋体" lang="ZH-CN">内存、磁盘文件等</font><fontface="Arial">)</font><font face="宋体" lang="ZH-CN">写数据的特定方法。流的其它所有写数据的方法</font><fontface="Arial">(</font><font face="宋体" lang="ZH-CN">如</font><font face="Arial">WriteBuffer</font><fontface="宋体" lang="ZH-CN">、</font><font face="Arial">WriteComponent)</font><fontface="宋体" lang="ZH-CN">都调用</font><font face="Arial">Write</font><fontface="宋体" lang="ZH-CN">担当实际的写操作。</p><p>  </font><font face="Arial">11. WriteBuffer</font><font face="宋体" lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">procedure WriteBuffer(const Buffer; Count:Longint); </font><font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">WriteBuffer</font><font face="宋体" lang="ZH-CN">的功能与</font><fontface="Arial">Write</font><font face="宋体" lang="ZH-CN">相似。</font><fontface="Arial">WriteBuffer</font><font face="宋体" lang="ZH-CN">方法调用</font><fontface="Arial">Write</font><font face="宋体" lang="ZH-CN">来执行实际的写操作,如果流没能写所有字节,</font><fontface="Arial">WriteBuffer</font><font face="宋体" lang="ZH-CN">会触发一个</font><fontface="Arial">EWriteError</font><font face="宋体" lang="ZH-CN">异常事件。</p><p>  </font><font face="Arial">12. WriteComponent</font><font face="宋体"lang="ZH-CN">方法</p><p>  在</font><font face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象和</font><fontface="Arial">Filer</font><font face="宋体" lang="ZH-CN">对象都有被称为</font><fontface="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">的方法。</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的</font><fontface="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">方法将</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">所指定的部件和它所包含的所有部件都写入流中;</font><fontface="Arial">Writer</font><font face="宋体" lang="ZH-CN">对象的</font><fontface="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">将指定部件的属性值写入</font><fontface="Arial">Writer</font><font face="宋体" lang="ZH-CN">对象的流中。</p><p>  </font><font face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的</font><fontface="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">方法声明是这样的:</font><fontface="Arial"></p><p>procedure WriteComponent(Instance: Tcomponent); </p><p></font> <font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">创建一个</font><fontface="Arial">Writer</font><font face="宋体" lang="ZH-CN">对象,并调用</font><fontface="Arial">Writer</font><font face="宋体" lang="ZH-CN">的</font><font face="Arial">WriteRootComponent</font><fontface="宋体" lang="ZH-CN">方法将</font><font face="Arial">Instance</font><fontface="宋体" lang="ZH-CN">及其拥有的对象写入流。</p><p>  </font><font face="Arial">13. WriteComponentRes</font><font face="宋体"lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">WriteComponentRes(const ResName: String;Instance: TComponent); </font><font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">WriteComponentRes</font><font face="宋体"lang="ZH-CN">方法首先往流中写入标准</font><font face="Arial">Windows </font><fontface="宋体" lang="ZH-CN">资源文件头,然后将</font><font face="Arial">Instance</font><fontface="宋体" lang="ZH-CN">指定的部件写入流中。要读由</font><fontface="Arial">WriteComponentRes</font><font face="宋体" lang="ZH-CN">写入的部件,必须调用</font><fontface="Arial">ReadComponentRes</font><font face="宋体" lang="ZH-CN">方法。</p><p>  </font><font face="Arial">WriteComponentRes</font><font face="宋体"lang="ZH-CN">使用</font><font face="Arial">ResName</font><font face="宋体"lang="ZH-CN">传入的字符串作为资源文件头的资源名,然后调用</font><fontface="Arial">WriteComponent</font><font face="宋体" lang="ZH-CN">方法将</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">和它拥有的部件写入流。</p><p>  </font><font face="Arial">14. WriteDescendant</font><font face="宋体"lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">procedure WriteDescendant(Instance Ancestor:TComponent); </font><font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的</font><fontface="Arial">WriteDescendant</font><font face="宋体" lang="ZH-CN">方法创建一个</font><fontface="Arial">Writer</font><font face="宋体" lang="ZH-CN">对象,然后调入该对象的</font><fontface="Arial">WriteDescendant</font><font face="宋体" lang="ZH-CN">方法将</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">部件写入流中。</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">可以是从</font><fontface="Arial">Ancestor</font><font face="宋体" lang="ZH-CN">部件继承的窗体,也可以是在从祖先窗体中继承的窗体中相应于祖先窗体中</font><fontface="Arial">Ancestor</font><font face="宋体" lang="ZH-CN">部件的部件。</p><p>  </font><font face="Arial">15. WriteDescendantRes</font><font face="宋体"lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">procedure WriteDescendantRes(const ResName:String;</p><p>Instance, Ancestor: TComponent);</font><font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">WriteDescendantRes</font><font face="宋体"lang="ZH-CN">方法将</font><font face="Arial">Windows</font><font face="宋体"lang="ZH-CN">资源文件头写入流,并使用</font><font face="Arial">ResName</font><fontface="宋体" lang="ZH-CN">作用资源名,然后调用</font><font face="Arial">WriteDescendant</font><fontface="宋体" lang="ZH-CN">方法,将</font><font face="Arial">Instance</font><fontface="宋体" lang="ZH-CN">写入流。</p><p> </font><font face="Arial"></p><p>20.1.1.2 TStream</font><font face="宋体" lang="ZH-CN">的实现原理</p><p> </p><p>  </font><font face="Arial">TStream</font><font face="宋体" lang="ZH-CN">对象是</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的基础类,这是</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的基础。为了能在不同媒介上的存储数据对象,后继的</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象主要是在</font><fontface="Arial">Read</font><font face="宋体" lang="ZH-CN">和</font><font face="Arial">Write</font><fontface="宋体" lang="ZH-CN">方法上做了改进,。因此,了解</font><fontface="Arial">TStream</font><font face="宋体" lang="ZH-CN">是掌握</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象管理的核心。</font><fontface="Arial">Borland</font><font face="宋体" lang="ZH-CN">公司虽然提供了</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象的接口说明文档,但对于其实现和应用方法却没有提及,笔者是从</font><fontface="Arial">Borland Delphi 2.0 Client/Server Suite </font><font face="宋体"lang="ZH-CN">提供的源代码和部分例子程序中掌握了流式对象技术。</p><p>  下面就从</font><font face="Arial">TStream</font><font face="宋体"lang="ZH-CN">的属性和方法的实现开始。</p><p>  </font><font face="Arial">1. TStream</font><font face="宋体" lang="ZH-CN">属性的实现</p><p>  前面介绍过,</font><font face="Arial">TStream</font><font face="宋体"lang="ZH-CN">具有</font><font face="Arial">Position</font><font face="宋体"lang="ZH-CN">和</font><font face="Arial">Size</font><font face="宋体" lang="ZH-CN">两个属性,作为抽象数据类型,它抽象了在各种存储媒介中读写数据所需要经常访问的域。那么它们是怎样实现的呢?</p><p>  在自定义部件编写这一章中介绍过部件属性定义中的读写控制。</font><fontface="Arial">Position</font><font face="宋体" lang="ZH-CN">和</font><font face="Arial">Size</font><fontface="宋体" lang="ZH-CN">也作了读写控制。定义如下:</p><p> </font><font face="Arial"></p><p>property Position: Longint read GetPosition write SetPosition;</p><p>property Size: Longint read GetSize;</p><p></font> <font face="宋体" lang="ZH-CN"></p><p>  由上可知,</font><font face="Arial">Position</font><font face="宋体"lang="ZH-CN">是可读写属性,而</font><font face="Arial">Size</font><fontface="宋体" lang="ZH-CN">是只读的。</p><p>  </font><font face="Arial">Position</font><font face="宋体" lang="ZH-CN">属性的实现就体现在</font><fontface="Arial">GetPosition</font><font face="宋体" lang="ZH-CN">和</font><fontface="Arial">SetPosition</font><font face="宋体" lang="ZH-CN">。当在程序运行过程中,任何读取</font><fontface="Arial">Position</font><font face="宋体" lang="ZH-CN">的值和给</font><fontface="Arial">Position</font><font face="宋体" lang="ZH-CN">赋值的操作都会自动触发私有方法</font><fontface="Arial">GetPosition</font><font face="宋体" lang="ZH-CN">和</font><font

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -