📄 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 + -