VCL包含多种用于简化程序设计任务的非可视化对象。下面的内容主要描述一些简化下列任务的帮助对象:
· 使用列表。
· 使用串列表。
· 改变Windows注册表和.INI文件。
· 使用流。
2.5.1 使用列表
几种VCL对象提供创建并治理列表的功能:
· TList维护指针列表。
· TObjectList维护实例对象的内存治理列表。
· TComponentList维护组件的内存治理列表(TComponent派生类的实例)。
· TQueue 维护指针的先进先出列表。
· TStack 维护指针的后进先出列表。
· TObjectQueue维护对象的先进先出列表。
· TObjectStack维护对象的后进先出列表。
· TClassList维护类的类型列表。
· TCollection、TOwnedCollection和TCollectionItem维护非凡定义项的索引集合。
· TStringList维护串列表。
关于这些对象的更多信息,请参见联机帮助的VCL参考手册。
2.5.2 使用串列表
应用程序经常需要治理字符串列表。字符串列表的例子包含组合框里的项,备注里的行,字符串网格的行或列名。VCL通过TStrings对象及其后裔TStringList提供字符串列表的通用接口。除提供治理字符串列表的功能之外,这些对象还易于互操作; 例如,可编辑备注的行(它是TStringList的实例),然后把它们作为组合框中的项(也是TStringList的实例)。
字符串列表属性通过TStringList出现于对象观察器的Value列中。双击TStringList可打开串列表编辑,在其中可以编辑、添加或删除行。还可以利用串列表对象在运行时执行下列任务:
· 装载并保存串列表。
· 创建新的串列表。
· 操纵列表中的串。
· 把对象与串列表联系起来。
1.装载并保存串列表
串列表对象提供SaveToFile和LoadFromFile方法用于将串列表保存为文本文件或从文本文件中载入串列表。文本文件的每一行对应于串列表的一个串。用这些方法,可以通过将文件载入备注组件创建一种简单的文字编辑器,或保存组合框的列表项。
下面的例子将WIN.INI文件载入备注字段并制作一个名为WIN.BAK的备份文件。
2.创建新的串列表串列表是典型的组件。若能方便地创建独立的字符串可节省时间,例如可为查询表保存串。创建并治理字符串列表的方式取决于列表为短期的(在单个例程中构造、使用和析构)或长期的(应用程序关闭之前都有效)。不管创建哪种类型的串列表,需牢记在完成工作时负责释放该列表。
(1) 短期的串列表
若只需在单个例程中使用串列表,可在同一地方创建、使用并析构串列表。这是使用串列表最安全的方法。由于串列表对象会为本身及其字符串分配内存,所以应使用try...__finally程序块来确保即使发生异常也能释放其内存。
1) 构造串列表对象。
2) 在try...__finally程序块的try部分,使用该串列表。
3) 在__finally部分,释放串列表对象。
下列事件通过构造、使用和消除串列表,处理程序响应单击按钮事件。
(2)长期的串列表
若串列表必须在应用程序运行时始终是可用的,则应在应用程序启动时构造串列表,在应用程序结束之前析构串列表。
1) 在应用程序主窗体的单元文件中,将TStrings类型的字段加到窗体的声明部分。
2) 为主窗体的构造编写事件处理程序,它在窗体出现之前执行,并会创建串列表并将其赋给在第一步中声明的字段。
3) 为窗体O n D e s t r o y事件编写事件处理程序,并在其中释放串列表。
本例使用长期串列表来记录用户鼠标对主窗体的单击,然后在应用程序结束之前将该列表保存到文件。
3.操纵列表中的串
常用串列表操作包括:
· 列表中的字符串计数。
· 访问非凡字符串。
· 查找字符串在列表中的位置。
· 迭代列表中的字符串。
· 在列表中加入字符串。
· 在列表中移动字符串。
· 在列表中删除字符串。
· 复制整个字符串列表。
(1) 列表中的字符串计数
只读属性Count返回列表中的字符串数。串列表使用零基准索引,所以Count值总是比最后一个串的索引值多一。
(2) 访问非凡字符串
数组属性Strings包含列表中的串,以零基准索引引用。因为是串列表的缺省属性,因此访问该列表时可省略Strings标识符;因此
(3) 查找字符串在列表中的位置
为定位字符串在列表中的位置,使用IndexOf方法。IndexOf返回列表中匹配参数的第一个字符串的索引,若没有找到则返回-1。IndexOf只查找准确匹配的字符串; 假如你要查找部分匹配的字符串,必须自己循环检查列表。例如,你可使用IndexOf来确定是否给定的文件名为列表框的项:
(4) 迭代列表中的字符串
为迭代列表中的字符串,使用从零到Count-1的for循环。本例子将列表框中的每个字符串都转换为大写字符。
(5) 在列表中加入字符串
为在列表中添加字符串,调用A d d方法,使用新字符串作为参数。要在列表中插入字符串表,调用Insert方法,传入两个参数:字符串及目标位置的索引。例如,若将“Insert”插入字符串表作为第三个串,可以使用:
为将一个列表中的串加到另一列表中,调用AddStrings:
(6) 在列表中移动字符串
为在列表中移动字符串,调用Move方法,传入两个参数: 字符串的索引及目标位置的索引。例如,若将字符串表的第三个串移动到第五的位置,可以使用:
(7) 在列表中删除字符串
为在列表中删除字符串,调用Delete方法,传入要删除串的索引。若你不知道要删除串的索引,先使用I n d e x O f方法定位它。要全部删除列表中的串,使用Clear方法。本例使用IndexOf和Delete方法来找到并删除一个串:
(8) 复制整个字符串列表
可使用Assign方法把源列表中的字符串复制到目的列表,覆盖目的列表的内容。若需附加而不是覆
盖目的列表的内容,使用AddStrings。例如,
将组合框中的行复制到备注(覆盖备注中的内容) 而
将组合框中的行添加到备注。
当制作串列表的本地拷贝,使用A s s i g n方法。假如简单的将一个串列表变量赋值给另一个
原始串列表对象将丢失,这经常会产生难以预料的结果。