?? 051.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎(chǔ)教程-->第二十章 開發(fā)Delphi對象式數(shù)據(jù)管理功能(一)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎(chǔ)教程 第二十章 開發(fā)Delphi對象式數(shù)據(jù)管理功能(一)">
<META NAME="description" CONTENT=" - DELPHI基礎(chǔ)教程 - 第二十章 開發(fā)Delphi對象式數(shù)據(jù)管理功能(一)">
<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" aLink=#9900ff link=#006699 vLink=#006699 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%" bgcolor="#e0e0e0"><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>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第二十章 開發(fā)Delphi對象式數(shù)據(jù)管理功能(一)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p> 面向?qū)ο蠹夹g(shù)是九十年代的主流技術(shù),各類應(yīng)用軟件如果以面向?qū)ο蟮姆椒?gòu)造并且滲透面向?qū)ο蟮娘L(fēng)格將使軟件具有更高的品質(zhì)。在面向?qū)ο蟪绦蛟O(shè)計中,對象式數(shù)據(jù)管理占有很重要的地位。在</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">中,對對象式數(shù)據(jù)管理的支持方式是其一大特色。</font><font
face="Arial"></p>
<p>Delphi</font><font face="宋體" lang="ZH-CN">是一個面向?qū)ο蟮目梢暬O(shè)計與面向?qū)ο蟮恼Z言相結(jié)合的集成開發(fā)環(huán)境。</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">的核心是部件。部件是對象的一種。</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">應(yīng)用程序完全是由部件來構(gòu)造的,因此開發(fā)高性能的</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">應(yīng)用程序必然會涉及對象式數(shù)據(jù)管理技術(shù)。</font><font
face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN">對象式數(shù)據(jù)管理包括兩方面的內(nèi)容:</font><font
face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN">●</font><font face="Arial"> </font><font
face="宋體" lang="ZH-CN">用對象來管理數(shù)據(jù)</font><font face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN">●</font><font face="Arial"> </font><font
face="宋體" lang="ZH-CN">對各類數(shù)據(jù)對象(包括對象和部件)的管理</font><font
face="Arial"></p>
<p></font> <font face="Arial"></p>
<p>Delphi</font><font face="宋體" lang="ZH-CN">在這兩方面都做的相當(dāng)出色。在</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">的早期版本</font><font
face="Arial">Turbo Pascal </font><font face="宋體" lang="ZH-CN">中就曾有流</font><font
face="Arial">(Stream)</font><font face="宋體" lang="ZH-CN">、群</font><font
face="Arial">(Collection)</font><font face="宋體" lang="ZH-CN">和資源</font><font
face="Arial">(Resource)</font><font face="宋體" lang="ZH-CN">等專門用于對象式數(shù)據(jù)管理的類。在</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">中,這些功能得到了大大的加強(qiáng)。</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">將對象式數(shù)據(jù)管理類歸結(jié)為</font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象</font><font face="Arial">(Stream)</font><font
face="宋體" 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">,并將它們應(yīng)用于可視部件類庫(</font><font face="Arial">VCL</font><font
face="宋體" lang="ZH-CN">)的方方面面。它們不僅提供了在內(nèi)存、外存和</font><font
face="Arial">Windows</font><font face="宋體" lang="ZH-CN">資源中管理對象的功能,還提供了在數(shù)據(jù)庫</font><font
face="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">對象的實(shí)現(xiàn)原理、應(yīng)用方法以及在超媒體系統(tǒng)中的應(yīng)用。這對于運(yùn)用</font><font
face="Arial">Delphi </font><font face="宋體" lang="ZH-CN">開發(fā)高級應(yīng)用是很重要的。</p>
<p> </font><font face="Arial"></p>
<p>20.1 </font><font face="宋體" lang="ZH-CN">流式對象的實(shí)現(xiàn)原理和應(yīng)用</p>
<p> </p>
<p> </font><font face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象,又稱流式對象,是</font><font
face="Arial">TStream</font><font face="宋體" lang="ZH-CN">、</font><font face="Arial">THandleStream</font><font
face="宋體" lang="ZH-CN">、</font><font face="Arial">TFileStream</font><font
face="宋體" lang="ZH-CN">、</font><font face="Arial">TMemoryStream</font><font
face="宋體" lang="ZH-CN">、</font><font face="Arial">TResourceStream</font><font
face="宋體" lang="ZH-CN">和</font><font face="Arial">TBlobStream</font><font
face="宋體" lang="ZH-CN">等的統(tǒng)稱。它們分別代表了在各種媒介上存儲數(shù)據(jù)的能力,它們將各種數(shù)據(jù)類型</font><font
face="Arial">(</font><font face="宋體" lang="ZH-CN">包括對象和部件</font><font
face="Arial">) </font><font face="宋體" lang="ZH-CN">在內(nèi)存、外存和數(shù)據(jù)庫字段中的管理操作抽象為對象方法,并且充分利用了面向?qū)ο蠹夹g(shù)的優(yōu)點(diǎn),應(yīng)用程序可以相當(dāng)容易地在各種</font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象中拷貝數(shù)據(jù)。</p>
<p> 下面介紹各種對象的數(shù)據(jù)和方法及使用方法。</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">對象是能在各種媒介中存儲二進(jìn)制數(shù)據(jù)的對象的抽象對象。從</font><font
face="Arial">TStream </font><font face="宋體" lang="ZH-CN">對象繼承的對象用于在內(nèi)存、</font><font
face="Arial">Windows</font><font face="宋體" lang="ZH-CN">資源文件、磁盤文件和數(shù)據(jù)庫字段等媒介中存儲數(shù)據(jù)。</p>
<p> </font><font face="Arial">TStream</font><font face="宋體" lang="ZH-CN">中定義了兩個屬性:</font><font
face="Arial">Size</font><font face="宋體" lang="ZH-CN">和</font><font face="Arial">Position</font><font
face="宋體" lang="ZH-CN">。它們分別以字節(jié)為單位表示的流的大小和當(dāng)前指針位置。</font><font
face="Arial">TStream</font><font face="宋體" lang="ZH-CN">中定義的方法用于在各種流中讀、寫和相互拷貝二進(jìn)制數(shù)據(jù)。因?yàn)樗械?lt;/font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象都是從</font><font
face="Arial">TStream</font><font face="宋體" lang="ZH-CN">中繼承來的,所以在</font><font
face="Arial">TStream</font><font face="宋體" lang="ZH-CN">中定義的域和方法都能被</font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象調(diào)用和訪問。此外,又由于面向?qū)ο蠹夹g(shù)的動態(tài)聯(lián)編功能,</font><font
face="Arial">TStream</font><font face="宋體" lang="ZH-CN">為各種流的應(yīng)用提供了統(tǒng)一的接口,簡化了流的使用;不同</font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象是抽象了對不同存儲媒介的數(shù)據(jù)上的操作,因此,</font><font
face="Arial">TStream</font><font face="宋體" lang="ZH-CN">的需方法為在不同媒介間的數(shù)據(jù)拷貝提供了最簡捷的手段。</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><font
face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN">聲明:</font><font face="Arial">property
Position: Longint; </font><font face="宋體" lang="ZH-CN"></p>
<p> </font><font face="Arial">Position</font><font face="宋體" lang="ZH-CN">屬性指明流中讀寫的當(dāng)前偏移量。</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">屬性指明了以字節(jié)為單位的流的的大小,它是只讀的。</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><font
face="宋體" lang="ZH-CN">所指定的流中拷貝</font><font face="Arial">Count</font><font
face="宋體" lang="ZH-CN">個字節(jié)到當(dāng)前流中,</font> <font face="宋體"
lang="ZH-CN">并將指針從當(dāng)前位置移動</font><font face="Arial">Count</font><font
face="宋體" lang="ZH-CN">個字節(jié)數(shù),函數(shù)返回值是實(shí)際拷貝的字節(jié)數(shù)。</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">方法從當(dāng)前流中的當(dāng)前位置起將</font><font
face="Arial">Count</font><font face="宋體" lang="ZH-CN">個字節(jié)的內(nèi)容復(fù)制到</font><font
face="Arial">Buffer</font><font face="宋體" lang="ZH-CN">中,并把當(dāng)前指針向后移動</font><font
face="Arial">Count</font><font face="宋體" lang="ZH-CN">個字節(jié)數(shù),函數(shù)返回值是實(shí)際讀的字節(jié)數(shù)。如果返回值小于</font><font
face="Arial">Count</font><font face="宋體" lang="ZH-CN">,這意味著讀操作在讀滿所需字節(jié)數(shù)前指針已經(jīng)到達(dá)了流的尾部。</p>
<p> </font><font face="Arial">Read</font><font face="宋體" lang="ZH-CN">方法是抽象方法。每個后繼</font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象都要根據(jù)自己特有的有關(guān)特定存儲媒介的讀操作覆蓋該方法。而且流的所有其它的讀數(shù)據(jù)的方法(如:</font><font
face="Arial">ReadBuffer</font><font face="宋體" lang="ZH-CN">,</font><font
face="Arial">ReadComponent</font><font face="宋體" lang="ZH-CN">等)在完成實(shí)際的讀操作時都調(diào)用了</font><font
face="Arial">Read</font><font face="宋體" lang="ZH-CN">方法。面向?qū)ο蟮膭討B(tài)聯(lián)編的優(yōu)點(diǎn)就體現(xiàn)在這兒。因?yàn)楹罄^</font><font
face="Arial">Stream</font><font face="宋體" lang="ZH-CN">對象只需覆蓋</font><font
face="Arial">Read</font><font face="宋體" lang="ZH-CN">方法,而其它讀操作</font><font
face="Arial">(</font><font face="宋體" lang="ZH-CN">如</font><font face="Arial">ReadBuffer</font><font
face="宋體" lang="ZH-CN">、</font><font face="Arial">ReadComponent</font><font
face="宋體" lang="ZH-CN">等</font><font face="Arial">)</font><font face="宋體"
lang="ZH-CN">都不需要重新定義,而且</font><font face="Arial">TStream</font><font
face="宋體" lang="ZH-CN">還提供了統(tǒng)一的接口。</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><font
face="Arial">Count</font><font face="宋體" lang="ZH-CN">個字節(jié)復(fù)制到</font><font
face="Arial">Buffer </font><font face="宋體" lang="ZH-CN">中,</font> <font
face="宋體" lang="ZH-CN">并將流的當(dāng)前指針向后移動</font><font face="Arial">Count</font><font
face="宋體" lang="ZH-CN">個字節(jié)。如讀操作超過流的尾部,</font><font
face="Arial">ReadBuffer</font><font face="宋體" lang="ZH-CN">方法引起</font><font
face="Arial">EReadError</font><font face="宋體" lang="ZH-CN">異常事件。</p>
<p> </font><font face="Arial">6. ReadComponent</font><font face="宋體" lang="ZH-CN">方法</font><font
face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN"> </font> <font face="宋體" lang="ZH-CN">聲明:</font><font
face="Arial">function ReadComponent(Instance: TComponent): TComponent; </p>
<p>ReadComponent</font><font face="宋體" lang="ZH-CN">方法從當(dāng)前流中讀取由</font><font
face="Arial">Instance</font><font face="宋體" lang="ZH-CN">所指定的部件,函數(shù)返回所讀的部件。</font><font
face="Arial">ReadComponent</font><font face="宋體" lang="ZH-CN">在讀</font><font
face="Arial">Instance</font><font face="宋體" lang="ZH-CN">及其擁有的所有對象時創(chuàng)建了一個</font><font
face="Arial">Reader</font><font face="宋體" lang="ZH-CN">對象并調(diào)用它的</font><font
face="Arial">ReadRootComponent</font><font face="宋體" lang="ZH-CN">方法。</p>
<p> 如果</font><font face="Arial">Instance</font><font face="宋體" lang="ZH-CN">為</font><font
face="Arial">nil</font><font face="宋體" lang="ZH-CN">,</font><font face="Arial">ReadComponent</font><font
face="宋體" lang="ZH-CN">的方法基于流中描述的部件類型信息創(chuàng)建部件,并返回新創(chuàng)建的部件。</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><font
face="Arial">Instance</font><font face="宋體" lang="ZH-CN">指定的部件,但是流的當(dāng)前位置必須是由</font><font
face="Arial">WriteComponentRes</font><font face="宋體" lang="ZH-CN">方法所寫入的部件的位置。</p>
<p> </font><font face="Arial">ReadComponentRes </font><font face="宋體"
lang="ZH-CN">首先調(diào)用</font><font face="Arial">ReadResHeader</font><font face="宋體"
lang="ZH-CN">方法從流中讀取資源頭,然后調(diào)用</font><font face="Arial">ReadComponent</font><font
face="宋體" lang="ZH-CN">方法讀取</font><font face="Arial">Instance</font><font
face="宋體" lang="ZH-CN">。如果流的當(dāng)前位置不包含一個資源頭。</font><font
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -