?? 052.htm
字號:
face="Arial">FModified</font><font face="宋體" lang="ZH-CN">置為</font><font
face="Arial">True</font><font face="宋體" lang="ZH-CN">。</font><font face="Arial"></p>
<p>3. Seek</font><font face="宋體" lang="ZH-CN">和</font><font face="Arial">GetBlobSize</font><font
face="宋體" lang="ZH-CN">方法的實現</p>
<p> </font><font face="Arial">Seek</font><font face="宋體" lang="ZH-CN">方法的功能主要是移動</font><font
face="Arial">BLOB</font><font face="宋體" lang="ZH-CN">流的位置指針。</font><font
face="Arial">GetBlobSize</font><font face="宋體" lang="ZH-CN">方法是私有的,在</font><font
face="Arial">Seek</font><font face="宋體" lang="ZH-CN">方法中被調用,其功能是得到</font><font
face="Arial">BLOB</font><font face="宋體" lang="ZH-CN">數據的大小。它們的實現如下:</p>
<p> </p>
<p></font><font face="Arial">function TBlobStream.GetBlobSize: Longint;</p>
<p>begin</p>
<p>Result := 0;</p>
<p>if FOpened then</p>
<p>Check(DbiGetBlobSize(FDataSet.Handle, FRecord, FFieldNo, Result));</p>
<p>end;</p>
<p> </p>
<p>function TBlobStream.Seek(Offset: Longint; Origin: Word): Longint;</p>
<p>begin</p>
<p>case Origin of</p>
<p>0: FPosition := Offset;</p>
<p>1: Inc(FPosition, Offset);</p>
<p>2: FPosition := GetBlobSize + Offset;</p>
<p>end;</p>
<p>Result := FPosition;</p>
<p>end;</p>
<p> </p>
<p>GetBlobSize</font><font face="宋體" lang="ZH-CN">調用了</font><font face="Arial">BDE
API</font><font face="宋體" lang="ZH-CN">的</font><font face="Arial">DbiGetBlobSize</font><font
face="宋體" lang="ZH-CN">函數,該函數的參數的含義同前面的</font><font
face="Arial">API</font><font face="宋體" lang="ZH-CN">函數相同。</p>
<p> </font><font face="Arial">4. Truncate</font><font face="宋體" lang="ZH-CN">方法</font><font
face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN">該方法是通過調用</font><font
face="Arial">BDE API</font><font face="宋體" lang="ZH-CN">函數實現的。其實現如下:</p>
<p> </p>
<p></font><font face="Arial">procedure TBlobStream.Truncate;</p>
<p>begin </p>
<p>if FOpened then</p>
<p>begin</p>
<p>Check(DbiTruncateBlob(FDataSet.Handle, FRecord, FFieldNo, FPosition));</p>
<p>FModified := True;</p>
<p>end;</p>
<p>end;</p>
<p> </font><font face="宋體" lang="ZH-CN"></p>
<p> 該方法從</font><font face="Arial">BLOB</font><font face="宋體" lang="ZH-CN">流的當前位置起刪除所有數據,并設置修改標志</font><font
face="Arial">FModified</font><font face="宋體" lang="ZH-CN">為</font><font face="Arial">True</font><font
face="宋體" lang="ZH-CN">。在</font><font face="Arial">Delphi VCL</font><font
face="宋體" lang="ZH-CN">中許多部件特別是數據庫應用方面的部件都用</font><font
face="Arial">BDE API</font><font face="宋體" lang="ZH-CN">函數完成對數據庫的訪問,如</font><font
face="Arial">Data Access</font><font face="宋體" lang="ZH-CN">和</font><font
face="Arial">Data Control</font><font face="宋體" lang="ZH-CN">部件。各種數據庫部件都是</font><font
face="Arial">BDE API</font><font face="宋體" lang="ZH-CN">函數外層的包裝簡化了對數據庫的訪問操作。</font><font
face="Arial">BDE API</font><font face="宋體" lang="ZH-CN">中還提供了避開</font><font
face="Arial">BDE</font><font face="宋體" lang="ZH-CN">配置工具在程序中直接處理</font><font
face="Arial">Alias(</font><font face="宋體" lang="ZH-CN">建立、修改、刪除等</font><font
face="Arial">)</font><font face="宋體" lang="ZH-CN">的函數支持,這也是部件所沒有提供的。在</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">數據庫應用安裝程序中,這些</font><font
face="Arial">Alias</font><font face="宋體" lang="ZH-CN">操作函數無疑是相當重要的。有關</font><font
face="Arial">BDE API</font><font face="宋體" lang="ZH-CN">函數的詳細介紹,可閱讀</font><font
face="Arial">Delphi2.0 Client/Server Suite</font><font face="宋體" lang="ZH-CN">所帶的</font><font
face="Arial">BDE API </font><font face="宋體" lang="ZH-CN">幫助文件。</p>
<p> </p>
<p> </font><font face="Arial"></p>
<p>20.2 </font><font face="宋體" lang="ZH-CN">讀寫對象的實現原理和應用</p>
<p> </p>
<p> 讀寫對象(</font><font face="Arial">Filer</font><font face="宋體"
lang="ZH-CN">)包括</font><font face="Arial">TFiler</font><font face="宋體"
lang="ZH-CN">對象、</font><font face="Arial">TReader</font><font face="宋體"
lang="ZH-CN">對象和</font><font face="Arial">TWriter</font><font face="宋體"
lang="ZH-CN">對象。</font><font face="Arial">TFiler</font><font face="宋體"
lang="ZH-CN">對象是文件讀寫的基礎對象,在應用程序中使用的主要是</font><font
face="Arial">TReader</font><font face="宋體" lang="ZH-CN">和</font><font face="Arial">TWriter</font><font
face="宋體" lang="ZH-CN">。</font><font face="Arial">TReader</font><font face="宋體"
lang="ZH-CN">和</font><font face="Arial">TWriter</font><font face="宋體" lang="ZH-CN">對象都直接從</font><font
face="Arial">TFiler</font><font face="宋體" lang="ZH-CN">對象繼承。</font><font
face="Arial">TFiler</font><font face="宋體" lang="ZH-CN">對象定義了</font><font
face="Arial">Filer</font><font face="宋體" lang="ZH-CN">對象的基本屬性和方法。</p>
<p> </font><font face="Arial">Filer</font><font face="宋體" lang="ZH-CN">對象主要完成兩大功能:</p>
<p> ●</font><font face="Arial"> </font><font face="宋體" lang="ZH-CN">存取窗體文件和窗體文件中的部件</p>
<p> ●</font><font face="Arial"> </font><font face="宋體" lang="ZH-CN">提供數據緩沖,加快數據讀寫操作</p>
<p> </font><font face="Arial"></p>
<p>20.2.1 TFiler</font><font face="宋體" lang="ZH-CN">對象</p>
<p> </font><font face="Arial"></p>
<p></font><font face="宋體" lang="ZH-CN"> </font><font face="Arial">TFiler</font><font
face="宋體" lang="ZH-CN">對象是</font><font face="Arial">TReader</font><font
face="宋體" lang="ZH-CN">和</font><font face="Arial">TWriter</font><font face="宋體"
lang="ZH-CN">的抽象類,定義了用于部件存儲的基本屬性和方法。它定義了</font><font
face="Arial">Root</font><font face="宋體" lang="ZH-CN">屬性,</font><font
face="Arial">Root</font><font face="宋體" lang="ZH-CN">指明了所讀或寫的部件的根對象,它的</font><font
face="Arial">Create</font><font face="宋體" lang="ZH-CN">方法將</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">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">TFiler </font><font face="宋體" lang="ZH-CN">對象還提供了兩個定義屬性的方法:</font><font
face="Arial">DefineProperty</font><font face="宋體" lang="ZH-CN">和</font><font
face="Arial">DefineBinaryProperty</font><font face="宋體" lang="ZH-CN">,這兩個方法使對象能讀寫不在部件</font><font
face="Arial">published</font><font face="宋體" lang="ZH-CN">部分定義的屬性。</p>
<p> 因為</font><font face="Arial">Filer</font><font face="宋體" lang="ZH-CN">對象主要用于存取</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">的窗體文件和窗體文件中的部件,所以要清楚地理解</font><font
face="Arial">Filer</font><font face="宋體" lang="ZH-CN">對象就要清楚</font><font
face="Arial">Delphi </font><font face="宋體" lang="ZH-CN">窗體文件</font><font
face="Arial">(DFM</font><font face="宋體" lang="ZH-CN">文件</font><font face="Arial">)</font><font
face="宋體" lang="ZH-CN">的結構。</p>
<p> </font><font face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件是用于</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">存儲窗體的。窗體是</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">可視化程序設計的核心。窗體對應</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">應用程序中的窗口,窗體中的可視部件對應窗口中的界面元素,非可視部件如</font><font
face="Arial">TTable</font><font face="宋體" lang="ZH-CN">和</font><font face="Arial">TOpenDialog</font><font
face="宋體" lang="ZH-CN">,對應</font><font face="Arial">Delphi</font><font
face="宋體" lang="ZH-CN">應用程序的某項功能。</font><font face="Arial">Delphi</font><font
face="宋體" lang="ZH-CN">應用程序的設計實際上是以窗體的設計為中心。因此,</font><font
face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件在</font><font face="Arial">Delphi</font><font
face="宋體" lang="ZH-CN">應用設計中也占很重要的位置。窗體中的所有元素包括窗體自身的屬性都包含在</font><font
face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件中。</p>
<p> 在</font><font face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">應用程序窗口,界面元素是按擁有關系相互聯系的,因此樹狀結構是最自然的表達形式;相應地,窗體中的部件也是按樹狀結構組織;對應在</font><font
face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件中,也要表達這種關系。</font><font
face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件在物理上,是以二進制方式存儲的,在邏輯上則是以樹狀結構安排各部件的關系。</font><font
face="Arial">Delphi</font><font face="宋體" lang="ZH-CN">編輯窗口支持以文本方式顯示</font><font
face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件。從該文本中可以看清窗體的樹狀結構。下面是</font><font
face="Arial">DFM</font><font face="宋體" lang="ZH-CN">文件的文本顯示:</p>
<p> </p>
<p> </font><font face="Arial">Object Form1: TForm1</p>
<p>Left = 72</p>
<p>Top = 77</p>
<p>ActiveControl = DBIMage1</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>Object Panell: TPanel</p>
<p>Left = 6</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>Object DBLabel1: TDBText</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>end</p>
<p>Object DBImage1: TDBImage</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>end</p>
<p>end</p>
<p>Object Panel2: TPanel</p>
<p>Left = 6</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>Object Label1: TLable</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>end</p>
<p>end</p>
<p>Object Panel3: TPanel</p>
<p>Left = 6</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>Object DBLabel2: TDBText</p>
<p></font><font face="宋體" lang="ZH-CN">…</font><font face="Arial"></p>
<p>end</p>
<p>end</p>
<p>end </p>
</font><font face="宋體" lang="ZH-CN"><p> 關于</font><font face="Arial">DFM</font><font
face="宋體" lang="ZH-CN">文件中存儲屬性值的規則,請參見自定義部件開發這一章。</p>
<p> 對照</font><font face="Arial">TFiler</font><font face="宋體" lang="ZH-CN">對象的屬性。</font><font
face="Arial">Root</font><font face="宋體" lang="ZH-CN">屬性就表示部件樹的根──窗體。</font><font
face="Arial">Filer</font><font face="宋體" lang="ZH-CN">對象的許多方法都是讀從根起始的樹中所有的部件。</font><font
face="Arial">Ancestor</font><font face="宋體" lang="ZH-CN">屬性表示根的祖先對象,</font><font
face="Arial">IgnoreChildren</font><font face="宋體" lang="ZH-CN">屬性則是讀部件時忽略根的子結點。</p>
<p> 下面介紹</font><font face="Arial">Filer</font><font face="宋體"
lang="ZH-CN">對象的屬性和方法。</font></p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" bgcolor="#e0e0e0"><strong><A HREF="053.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="051.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>
</TR>
</table>
</BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -