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

📄 051.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>—DELPHI基础教程—第二十章 开发Delphi对象式数据管理功能(一)</TITLE><META NAME="keywords" CONTENT=" DELPHI基础教程 第二十章 开发Delphi对象式数据管理功能(一)"><META NAME="description" CONTENT=" - DELPHI基础教程 - 第二十章 开发Delphi对象式数据管理功能(一)"><style><!--#page {position:absolute; z-index:0; left:0px; top:0px}.tt3 {font: 9pt/12pt "宋体"}.tt2 {font: 12pt/15pt "宋体"}a {text-decoration:none}a:hover {color: blue;text-decoration:underline}--></style></HEAD><body text="#000000"  bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3"><TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0><TR><TD CLASS="tt3" VALIGN="top" width="8%"  ><strong><A HREF="052.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="050.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD><TD class="tt2"  width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="隶书">第二十章 开发Delphi对象式数据管理功能(一)</FONT></B></center><hr  width="94%"><p>  面向对象技术是九十年代的主流技术,各类应用软件如果以面向对象的方法构造并且渗透面向对象的风格将使软件具有更高的品质。在面向对象程序设计中,对象式数据管理占有很重要的地位。在</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">中,对对象式数据管理的支持方式是其一大特色。</font><fontface="Arial"></p><p>Delphi</font><font face="宋体" lang="ZH-CN">是一个面向对象的可视化设计与面向对象的语言相结合的集成开发环境。</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">的核心是部件。部件是对象的一种。</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">应用程序完全是由部件来构造的,因此开发高性能的</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">应用程序必然会涉及对象式数据管理技术。</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN">对象式数据管理包括两方面的内容:</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">用对象来管理数据</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">对各类数据对象(包括对象和部件)的管理</font><fontface="Arial"></p><p></font> <font face="Arial"></p><p>Delphi</font><font face="宋体" lang="ZH-CN">在这两方面都做的相当出色。在</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">的早期版本</font><fontface="Arial">Turbo Pascal </font><font face="宋体" lang="ZH-CN">中就曾有流</font><fontface="Arial">(Stream)</font><font face="宋体" lang="ZH-CN">、群</font><fontface="Arial">(Collection)</font><font face="宋体" lang="ZH-CN">和资源</font><fontface="Arial">(Resource)</font><font face="宋体" lang="ZH-CN">等专门用于对象式数据管理的类。在</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">中,这些功能得到了大大的加强。</font><fontface="Arial">Delphi</font><font face="宋体" lang="ZH-CN">将对象式数据管理类归结为</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象</font><font face="Arial">(Stream)</font><fontface="宋体" lang="ZH-CN">和</font><font face="Arial">Filer</font><font face="宋体"lang="ZH-CN">对象</font><font face="Arial">(Filer)</font><font face="宋体"lang="ZH-CN">,并将它们应用于可视部件类库(</font><font face="Arial">VCL</font><fontface="宋体" lang="ZH-CN">)的方方面面。它们不仅提供了在内存、外存和</font><fontface="Arial">Windows</font><font face="宋体" lang="ZH-CN">资源中管理对象的功能,还提供了在数据库</font><fontface="Arial">BLOB</font><font face="宋体" lang="ZH-CN">字段中对象的功能。</p><p>  在本章中将介绍</font><font face="Arial">Stream</font><font face="宋体"lang="ZH-CN">对象和</font><font face="Arial">Filer</font><font face="宋体"lang="ZH-CN">对象的实现原理、应用方法以及在超媒体系统中的应用。这对于运用</font><fontface="Arial">Delphi </font><font face="宋体" lang="ZH-CN">开发高级应用是很重要的。</p><p> </font><font face="Arial"></p><p>20.1 </font><font face="宋体" lang="ZH-CN">流式对象的实现原理和应用</p><p> </p><p>  </font><font face="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象,又称流式对象,是</font><fontface="Arial">TStream</font><font face="宋体" lang="ZH-CN">、</font><font face="Arial">THandleStream</font><fontface="宋体" lang="ZH-CN">、</font><font face="Arial">TFileStream</font><fontface="宋体" lang="ZH-CN">、</font><font face="Arial">TMemoryStream</font><fontface="宋体" lang="ZH-CN">、</font><font face="Arial">TResourceStream</font><fontface="宋体" lang="ZH-CN">和</font><font face="Arial">TBlobStream</font><fontface="宋体" lang="ZH-CN">等的统称。它们分别代表了在各种媒介上存储数据的能力,它们将各种数据类型</font><fontface="Arial">(</font><font face="宋体" lang="ZH-CN">包括对象和部件</font><fontface="Arial">) </font><font face="宋体" lang="ZH-CN">在内存、外存和数据库字段中的管理操作抽象为对象方法,并且充分利用了面向对象技术的优点,应用程序可以相当容易地在各种</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象中拷贝数据。</p><p>  下面介绍各种对象的数据和方法及使用方法。</p><p> </font><font face="Arial"></p><p>20.1.1 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">TStream </font><font face="宋体" lang="ZH-CN">对象继承的对象用于在内存、</font><fontface="Arial">Windows</font><font face="宋体" lang="ZH-CN">资源文件、磁盘文件和数据库字段等媒介中存储数据。</p><p>  </font><font face="Arial">TStream</font><font face="宋体" lang="ZH-CN">中定义了两个属性:</font><fontface="Arial">Size</font><font face="宋体" lang="ZH-CN">和</font><font face="Arial">Position</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">TStream</font><font face="宋体" 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">TStream</font><font face="宋体" lang="ZH-CN">为各种流的应用提供了统一的接口,简化了流的使用;不同</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象是抽象了对不同存储媒介的数据上的操作,因此,</font><fontface="Arial">TStream</font><font face="宋体" lang="ZH-CN">的需方法为在不同媒介间的数据拷贝提供了最简捷的手段。</p><p> </font><font face="Arial"></p><p>20.1.1.1 TStream</font><font face="宋体" lang="ZH-CN">的属性和方法</p><p> </p><p>  </font><font face="Arial">1. Position</font><font face="宋体" lang="ZH-CN">属性 </font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN">声明:</font><font face="Arial">propertyPosition: Longint; </font><font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">Position</font><font face="宋体" lang="ZH-CN">属性指明流中读写的当前偏移量。</p><p>  </font><font face="Arial">2. Size</font><font face="宋体" lang="ZH-CN">属性</p><p>  声明:</font><font face="Arial">property Size: Longint; </p><p>Size</font><font face="宋体" lang="ZH-CN">属性指明了以字节为单位的流的的大小,它是只读的。</p><p>  </font><font face="Arial">3. CopyFrom</font><font face="宋体" lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">function CopyFrom(Source: TStream; Count:Longint): Longint; </p><p>CopyFrom</font><font face="宋体" lang="ZH-CN">从</font><font face="Arial">Source</font><fontface="宋体" lang="ZH-CN">所指定的流中拷贝</font><font face="Arial">Count</font><fontface="宋体" lang="ZH-CN">个字节到当前流中,</font> <font face="宋体"lang="ZH-CN">并将指针从当前位置移动</font><font face="Arial">Count</font><fontface="宋体" lang="ZH-CN">个字节数,函数返回值是实际拷贝的字节数。</p><p>  </font><font face="Arial">4. Read</font><font face="宋体" lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">function Read(var Buffer; Count: Longint):Longint; virtual; abstract; </p><p>Read</font><font face="宋体" lang="ZH-CN">方法从当前流中的当前位置起将</font><fontface="Arial">Count</font><font face="宋体" lang="ZH-CN">个字节的内容复制到</font><fontface="Arial">Buffer</font><font face="宋体" lang="ZH-CN">中,并把当前指针向后移动</font><fontface="Arial">Count</font><font face="宋体" lang="ZH-CN">个字节数,函数返回值是实际读的字节数。如果返回值小于</font><fontface="Arial">Count</font><font face="宋体" lang="ZH-CN">,这意味着读操作在读满所需字节数前指针已经到达了流的尾部。</p><p>  </font><font face="Arial">Read</font><font face="宋体" lang="ZH-CN">方法是抽象方法。每个后继</font><fontface="Arial">Stream</font><font face="宋体" lang="ZH-CN">对象都要根据自己特有的有关特定存储媒介的读操作覆盖该方法。而且流的所有其它的读数据的方法(如:</font><fontface="Arial">ReadBuffer</font><font face="宋体" lang="ZH-CN">,</font><fontface="Arial">ReadComponent</font><font face="宋体" lang="ZH-CN">等)在完成实际的读操作时都调用了</font><fontface="Arial">Read</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><fontface="Arial">(</font><font face="宋体" lang="ZH-CN">如</font><font face="Arial">ReadBuffer</font><fontface="宋体" lang="ZH-CN">、</font><font face="Arial">ReadComponent</font><fontface="宋体" lang="ZH-CN">等</font><font face="Arial">)</font><font face="宋体"lang="ZH-CN">都不需要重新定义,而且</font><font face="Arial">TStream</font><fontface="宋体" lang="ZH-CN">还提供了统一的接口。</p><p>  </font><font face="Arial">5. ReadBuffer</font><font face="宋体" lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">procedure ReadBuffer(var Buffer; Count:Longint); </font><font face="宋体" lang="ZH-CN"></p><p>  </font><font face="Arial">ReadBuffer</font><font face="宋体" lang="ZH-CN">方法从流中将</font><fontface="Arial">Count</font><font face="宋体" lang="ZH-CN">个字节复制到</font><fontface="Arial">Buffer </font><font face="宋体" lang="ZH-CN">中,</font> <fontface="宋体" lang="ZH-CN">并将流的当前指针向后移动</font><font face="Arial">Count</font><fontface="宋体" lang="ZH-CN">个字节。如读操作超过流的尾部,</font><fontface="Arial">ReadBuffer</font><font face="宋体" lang="ZH-CN">方法引起</font><fontface="Arial">EReadError</font><font face="宋体" lang="ZH-CN">异常事件。</p><p>  </font><font face="Arial">6. ReadComponent</font><font face="宋体" lang="ZH-CN">方法</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font> <font face="宋体" lang="ZH-CN">声明:</font><fontface="Arial">function ReadComponent(Instance: TComponent): TComponent; </p><p>ReadComponent</font><font face="宋体" lang="ZH-CN">方法从当前流中读取由</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">所指定的部件,函数返回所读的部件。</font><fontface="Arial">ReadComponent</font><font face="宋体" lang="ZH-CN">在读</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">及其拥有的所有对象时创建了一个</font><fontface="Arial">Reader</font><font face="宋体" lang="ZH-CN">对象并调用它的</font><fontface="Arial">ReadRootComponent</font><font face="宋体" lang="ZH-CN">方法。</p><p>  如果</font><font face="Arial">Instance</font><font face="宋体" lang="ZH-CN">为</font><fontface="Arial">nil</font><font face="宋体" lang="ZH-CN">,</font><font face="Arial">ReadComponent</font><fontface="宋体" lang="ZH-CN">的方法基于流中描述的部件类型信息创建部件,并返回新创建的部件。</p><p>  </font><font face="Arial">7. ReadComponentRes</font><font face="宋体"lang="ZH-CN">方法</p><p>  声明:</font><font face="Arial">function ReadComponentRes(Instance:TComponent): TComponent; </p><p>ReadComponentRes</font><font face="宋体" lang="ZH-CN">方法从流中读取</font><fontface="Arial">Instance</font><font face="宋体" lang="ZH-CN">指定的部件,但是流的当前位置必须是由</font><fontface="Arial">WriteComponentRes</font><font face="宋体" lang="ZH-CN">方法所写入的部件的位置。</p><p>  </font><font face="Arial">ReadComponentRes </font><font face="宋体"lang="ZH-CN">首先调用</font><font face="Arial">ReadResHeader</font><font face="宋体"lang="ZH-CN">方法从流中读取资源头,然后调用</font><font face="Arial">ReadComponent</font><fontface="宋体" lang="ZH-CN">方法读取</font><font face="Arial">Instance</font><fontface="宋体" lang="ZH-CN">。如果流的当前位置不包含一个资源头。</font><fontface="Arial">ReadResHeader</font><font face="宋体" lang="ZH-CN">将引发一个</font><fontface="Arial">EInvalidImage</font><font face="宋体" lang="ZH-CN">异常事件。在</font><font

⌨️ 快捷键说明

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