TReader对象
TReader对象是可实例化的用于从相联系的流中读取数据的Filer对象 TReader对象从TFiler继承下来 除了从TFiler继承的属性和方法外 TReader声明了不少属性 方法和事件
Owner和Parent属性用于表示从Reader对象的流中读取的部件的拥有者和双亲结点 OnError OnFindMethod和OnSetName事件使应用程序在运行中读数据时能定制响应方式 除了覆盖了一些从TFiler对象中继承的方法外 TReader对象还定义大量的读不同类型的数据和触发事件的方法
TReader对象的属性和方法
Owner属性
声明
property Owner: TComponent;Reader对象的Owner属性存储了将用来给从Reader的流中读出的部件的Owner属性赋值的部件
Parent属性
声明
property Parent: TComponent;Parent属性存储将用来给从Reader的流中读出所有控制的Parent属性赋值的部件
Position属性
声明
propertion: Longint;Reader对象的Position属性表示相联的流中读的当前位置 Position的值还应包括读缓冲区的大小 对于Reader 对象 Position的值大于流的Position 的值 如果将Position的值设得超过当前缓冲区 将引起调用FlushBuffer
BeginReferences方法
声明
procedure BeginReferences;BeginReferences方法启动一连串关于读部件的命令 这些部件包含相互间的交叉引用 在使用上通常和FixupReferences和EndReferences一起放在Try…finally程序块中
在调用了BeginReferences后 Reader对象创建读取所有对象和名字的列表 所有的独立对象被读出后 调用FixupReferences方法将名字的相互从流中转移到对象实例中 最后调用EndReferences方法释放列表
处理部件相互引用的程序块形式如下
BeginReferences; { 创建临时列表 }
try
{ 读出所有部件并将它们的名字放在一临时列表中 }
…
FixupReferences; { 分 解 }
finally
EndReferences; { 释放临时列表 }
end;
FixUpReferences方法
声明
procedure FixupReferences;FixupReferences方法分解从流中读出的存在各种相互依赖部件的引用关系 FixupReferences总在try…finally块中并配合BeginReferences和EndReferences一起使用
EndReferences方法
声明
procedure EndReferences;EndReferences方法终止处理相互引用的块操作 释放对象列表 它总配合BeginReferences和FixupReferences一起使用
ReadListBegin方法
声明
procedure ReadListBegin;ReadListBegin方法从Reader对象相联的流中读取列表开始标志 如果流中紧接着要读取的项目不是一个由WritelistBegin方法写入的列表起始标志 ReadListBegin将引起一个读异常事件
通常在调用ReadlistBegin方法之后 紧跟着一个读项目的循环 循环以EndfList方法返回True 终止条件 这时 预示流中的下一个项目是列表结束标志 需要调用ReadListEnd方法
ReadListEnd方法
声明
procedure ReadListEnd;ReadListEnd 方法从流中读取列表结束标志 如果所读的项目不是一个列表结束标志 ReadListEnd方法引发一个EReadError异常事件
EndOfList方法
声明
function EndOfList: Boolean;如果Reader对象读到项目列表结果标志 EndOfList方法返回True
TStrings对象在从Reader对象读取项目列表时使用了ReadListBegin和ReadListEnd方法 下面的ReadData是TStrings的方法 用于在DefineProperties方面中读string数据
procedure TStrings ReadData(Reader: TReader)
begin
Reader ReadListBegin; { 读列表开始标志 }
Clear; { 清除已有的字符串 }
while not Reader EndOfList do { 只要还有数据 … }
Add(Reader ReadString) { …读一个字符串并将其加在列表中 }
Reader ReadListEnd; { 越过列表结束标志 }
end;
ReadSignature方法
声明
procedure ReadSignature;ReadSignature方法从流中读取部件之前首先调用ReadSignature方法 在载入对象之前检测标签 Reader对象就能防止疏忽大意 导致读取无效或过时的数据 Filer标签是四个字符 对于Delphi 该标签是 TPF
ReadPrefix方法
声明
procedure ReadPrefix(var Plags: TFilerFlags; var AChild Pos: Integer)ReadPrefix方法的功能与ReadSignature的很相象 只不过它是读取流中部件前面的标志(PreFix) 当一个Write对象将部件写入流中时 它在部件前面预写了两个值 第一个值是指明部件是否是从祖先窗体中继承的窗体和它在窗体中的位置是否重要的标志 第二个值指明它在祖先窗体创建次序 ReadComponent方法自动调用ReadPrefix 但如果需要独立读取部件的预读标志 也可直接调用该方向
OnFindMethod事件
声明
property OnFindMethod: TFindMethodEvent;OnFindMethod事件 发生在Reader对象读取对象的方法指针时 属性为方法指针的通常都是事件
响应OnFindMethod事件的理由 通常是处理过程找不到方法的情况 在FindMethod方法没有找到由Name指定的方法的情况下 如果它将OnFindMethod方法的Error 参数设为True 将引起ReadError异常事件 反之 将Error参数置为False 将防止FindMethod方法引发异常事件
Error方法
声明
function Error(const Message: String) Boolean; virtual;Error方法定义在Reader对象的protected部分 它是用于Reader对象的OnError事件 其返回值决定是否继续错误处理过程 如果返回值为True 则表示用程序应当继续错误处理 如果返回值为False 则表示错误情况被忽略
如果读部件或属性出错 Reader对象调用Error方法 缺省情况下 Error将返回值设为False 然后调用OnError事件处理过程
TReader对象总是在try…except程序块的except部分 并提供用户忽略错误的机会 Error的使用方法如下
try
… { 读部件 }
except
on E: Exception do
begin
…{ 执行一些清除操作 }
if Error(E Message) then raise;
end;
end;
OnError事件
声明
property OnError: TReaderError;当Reader对象读取数据出错时将引发OnError事件 通过处理OnError事件 可以有选择地处理或忽略错误
传给OnError事件处理过程的最后一个参数是名为Handled的var参数 在缺省情况下 Error方法将Handled置为True 这将阻止错误更进一步处理 如果事件处理过程仍旧将Handled置为False Reader对象将引发一个EReadError异常事件
SetName方法
声明
procedure SetName(Component: TComponent; var Name: String virtual)SetName方法允许Reader对象在将从流中读取的部件的Name值赋给部件的Name属性前修改Name值 ReadComponent方法在读取部件的属性值和其它数据前先读部件的类型和名字在读完名字后 ReadComponent将所读的名字作为Name参数传给SetName Name 是个var参数 因此SetName能在返回前修改字符串值 SetName还调用了OnSetName事件处理过程 将名字字符串作为var参数传入事件处理过程中 因此 事件处理过程也可修改字符串的值
lishixinzhi/Article/program/Delphi/201311/25092
DELPHI基础教程:开发Delphi对象式数据管理功能(四)[1]
TReader对象是可实例化的用于从相联系的流中读取数据的Filer对象 TReader对象从TFiler继承下来 除了从TFiler继承的属性和方法外 TReader声明了不少属性 方法和事件 Owner和Parent属性用于表示从Reader对象的流中读取的部件的拥有者和双亲结点 OnError OnFindMethod和OnSetName事件使应用程序在运行中读数据时能...
DELPHI基础教程:开发Delphi对象式数据管理功能(四)[2]
function Read String: string; ReadString方法从Reader对象的流中读取一个字符串 并返回字符串中的内容 该字符串是由Writer对象的WriteString方法写入 TReader对象的实现 Filer对象的作用主要是Delphi用来在DFM文件中读写各种类型的数据(包括部件对象) 这些数据的一个本质特征是变长 而且Filer对象将读写数...
DELPHI基础教程:Delphi开发数据库应用程序概述(一)[4]
DatabaseName属性指定将要访问的数据库的路径名 SQL属性指定对数据库表进行访问SQL语句 它可以是一条查询语句也可以是一条修改语句或插入语句等 在对象浏览器上 单击SQL属性时 会打开一个字符串编辑器供程序设计者输入SQL语句 在这里要注意在TQuery部件中 不是用TableName 属性来指定要访问的数据库中的...
DELPHI基础教程:开发Delphi对象式数据管理功能(二)[1]
在Classes在单元中提供了InternalReadComponentRes函数 该函数使用了TResourceStream对象从Delphi应用程序中读取部件 Delphi是将窗体和部件信息放在模块资源的RCDATA段的 TBlobStream对象 从Delphi 数据库开发平台这个意义上说 TBlobStream 对象是个很重要的对象 TBlobStream对象提供了修改TBlobField TBytesField或TVarBy...
DELPHI基础教程:开发Delphi对象式数据管理功能(五)[1]
第二十章 开发Delphi对象式数据管理功能(五)写DFM文件的过程 WriteComponentResFie 该过程带有两个参数FileName和Instance FileName参数指定要写入的DFM文件名 Instance参数是TComponent类型的 它指定要写入的部件名 一般是TForm对象的子类 该过程将Instance部件和其拥有的所有部件写入DFM文件 这个过程的意义...
Delphi7 从入门到精通目录
第一部分:基础入门 第1章:Delphi 7环境与集成开发环境(IDE)的初步认识 第2章:深入理解Delphi编程语言,掌握基本语法和数据类型 第3章:运行时库的使用,理解其核心功能和作用 第4章:核心库类详解,为开发提供强大支持 第5章:探索可视控件的世界,构建用户界面的基础 第6章:如何设计并实现用户...
DELPHI基础教程:文件管理(二)[4]
子窗口主菜单包括File Function Directory三个菜单项 分别用于完成文件的基本管理功能 其它管理功能和目录管理功能 由于对话框界面设计很简单 这里不再进行赘述 读者可直接参考后面将给出的对话框界面图(图 )进行设计 子窗口的创建 布置和关闭 子窗口的创建 布置由父窗口的Windows菜单控制 其菜单项如下 ●...
DELPHI基础教程:Delphi开发数据库应用程序概述(一)[1]
数据库管理系统(DBMS)是用于描述 管理和维护数据库的程序系统 是数据库系统的核心组成部分 它建立在操作系统的基础上 对数据库进行统一的管理和控制 其主要功能有 描述数据库 描述数据库的逻辑结构 存储结构 语义信息和保密要求等 管理数据库 控制整个数据库系统的运行 控制用户的并发性访问 检验数据的...
Delphi7程序设计与开发技术大全目录
第1章:Delphi概述1.1 Delphi简介:理解Delphi的核心概念和用途1.2 主要特性:熟悉语言特性(如面向对象编程),丰富的组件支持,强大的数据库访问,以及便捷的网络编程技术1.3 安装与卸载:步骤详解,包括安装过程和卸载指导第2章:集成开发环境2.1 窗口元素:如对象编辑器、工程管理器和调试器的详细...
Delphi基础教程图文版之基本数据类型
类型转换是编程中常见的操作,它分为自动类型转换和强制类型转换。自动转换发生在有序类型的范围内,字节数小的类型自动转换为字节数大的类型。而强制转换则是明确指示将字节数大的类型转换为字节数小的类型,需要开发者自行处理。实现转换有两种方式:类型映射或使用Delphi内置函数。理解数据类型和类型转换是...