TStrings类是管理字符串列表的VCL类。有几个VCL组件使用TString实例来管理它们的数据(通常是文本)。例如在之前的ScratchPad应用程序时使用了TStrings,你可能不记得使用了Strings类,而实际上是使用了,只不过没有意识到而已。还记得装载文件和保存文件吗?使用了类似下面的语句:

1
Memo.Lines.SaveToFile(SaveDialog.FileName);

TMemo的Lines属性是TStrings类的实例。TStrings的SaveToFile方法将字符串列表保存到磁盘的文件中。可使用相同的技术将磁盘上的文件装载到列表框中,或者保存列表框的内容到文件中。TListBox类中的Items属性就是TStrings类型,下面做个小练习:

1、建立新的应用程序,安放ListBox组件到窗口上;

2、改变ListBox组件的Name属性为ListBox;

3、双击窗体。Code Editor将显示FormCreate函数,敲入以下代码:

1
2
3
4
5
6
7
8
9
procedure TForm1.FormCreate(Sender: TObject);
var
  WinDir:array[0..255]of Char;
  FileName:string;
begin
  GetWindowsDirectory(WinDir, SizeOf(WinDir));
  FileName := WinDir +'\Win.ini';
  ListBox.Items.LoadFromFile(FileName);
end;

4、点击Run按钮编译并运行程序,运行如下:

当程序运行时,列表框中含有Windows目录下的Win.ini文件的内容,使用此方法,可以很容易将任何ASCII文本文件装载到列表框中。ComboBox组件也有相同的Items属性,也可以用同样的方法工作。

可以通过调用TStrings类的Add、Append、Delete、Insert及Move方法来增加、删除、插入及在ListBox、ComboBox或Memo中移动。

Note

Add如何执行依赖于Sorted属性的值,如果Sorted属性为True,Add会插入字符串到列表中需要的地方;如果是False,则新字符串会在列表尾增加。

调用Clear方法可以清除组件的内容。单个字符串可用数组下标操作符来访问。例如,在字符串列表中检索第一条字符串,会使用

1
Edit.Text := ListBox.Items[0];

Note

TStrings类中字符串实际包含在Strings属性中。Strings属性对TStrings类来说作为缺省数组属性(default array property),因此当检索字符串时不必用Strings属性来访问。下面两行的代码对于编译器来说是一样的:

1
2
Edit.Text := ListBox.Items[0];
Edit.Text := ListBox.Items.Strings[0];

在TStrings数组中,每个字符串包含字符串本身及额外的4字节存储。这额外的存储可通过Objects属性存取,可以用任意方式使用额外存储。例如,假设建立自绘的列表框(owner-drawn list box)显示位图(bitmap),用通常方法存储字符串,而把指向TBitmap的指针放到Objects数组中,语法如下:

property Objects[Index: Integer]: TObject;

Tip

也许有时需要管理与组件无关的一系列字符串。TStringList类恰好是为此目的提供的。这个类的运作同TStrings类似但可用在组件之外。TStringList类对读、操作及存储文本文件特别方便。

Note

在实际中,TStrings是所谓的抽象类。抽象类从不直接使用,它只作为基类,我们只能使用它的派生类。如上面讲的Memo中的Lines属性实际上是TMemoStrings类实例而不是TStrings实例。你也许会混乱因为Lines属性被声明为TStrings指针,但它实际上是TMemoStrings的实例。Lines属性的声明和建立如下:

1
2
3
4
var
  Lines: TStrings;
{...Later}
Lines := TMemoStrings.Create;

这就是为什么Lines属性像TStrings,而实际上并不是这样。

New Term

抽象基类(abstract base class)是不能直接使用的类,使用抽象基类必须建立派生类,而用的是派生类的实例。

VCL组件之TStrings相关推荐

  1. VCL组件之编辑控件

    VCL组件之编辑控件 Note 以后将用两种方式提及组件,以组件的名称或定义组件的VCL类的名称.可以说"Label组件用于--"或说"TLabel用于--", ...

  2. Delphi中预想不到的代码楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问

    Delphi中预想不到的代码 楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问 No.1   Delphi中的In ...

  3. VCL组件之重要的公用属性

    VCL组件之重要的公用属性 所有的组件都有某些公用的属性.例如所有的可视化组件都有Left和Top属性,它决定了组件在窗体上的位置.像Left.Top.Height及Width属性都是不言自明的,在此 ...

  4. 一个磁性窗体VCL组件的具体实现

    一个磁性窗体VCL组件的具体实现 副标题: 作者:佚名 文章来源:大富翁 点击数:52 更新时间:2005-2-25     文:陈达军 日期:2003-10-29 记得<程序员>杂志中曾 ...

  5. 结合Delphi和Python的优势:使用Delphi VCL组件快速构建超现代的Python本机Windows GUI桌面酷炫用户界面应用

    Delphi开发Pyhron GUI 有时您的应用程序需要一个用户界面,但是为Python应用程序制作用户界面最好的方法是什么?输入用于Python的DelphiVCL.VCL是成熟的Windows本 ...

  6. VCL组件之公用对话框组件

    公用对话框是一类非可视的组件,它们都由TDialog类继承而来,存在Dialogs组件面板上.包括: TOpenDialog--打开文件对话框组件,用它选择文件和浏览目录 TSaveDialog--保 ...

  7. VCL组件之TLabel、TStaticText和TLabeledEdit

    TLabel.TStaticText.TLabeledEdit类的继承关系如下:     Label组件位于Stantdard组件面板上,属于非窗口控件,不能获得输入焦点.一般用来显示一些用户不能改动 ...

  8. VCL组件之Name属性

    Name属性 Name属性在组件中占重要地位.在前面已经讨论了,在窗体上安放组件时会发生什么.当组件被安放在窗体上,同时考虑下一步动作的同时,Delphi就已经在幕后工作了.Delphi做的一件事是建 ...

  9. VCL组件之主要方法(Methods)和通用事件(Events)

    组件的主要方法(Methods) 大多数组件有20多个公用方法,窗口组件有40多个公用方法可以选择.有趣地是,并不是都被广泛使用.组件的多数功能通过属性来完成.例如,隐蔽一组件,可调用其Hide方法或 ...

最新文章

  1. 图神经网络从入门到入门
  2. Transferring GANs: generating images from limited data 论文学习
  3. nanodet onnx踩坑记录
  4. 一文带你了解Spring核心接口Ordered的实现及应用
  5. [翻译] Shimmer
  6. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线
  7. 【STM32】SYSTEM文件夹介绍,delay,sys,usart
  8. SQL优化常用方法9
  9. springMVC通过spring.xml对属性注入bean值(工厂模式)
  10. psql 时间日期操作符和函数
  11. 比Magic Leap快一步,HoloLamp做到了裸眼观看全息图
  12. matlab blms算法程序,LMS算法Matlab程序
  13. Android 初级探讨 OOM问题 以及解决优化之道
  14. 基于FFmpeg接收RTSP的ts流
  15. VPC2007与VServer2005R2比较
  16. Django 2.0 报错解决方案----持续更新中
  17. HDU 2188 (巴什博弈)
  18. 塔夫斯大学计算机教授,塔夫茨大学工程学院虚拟教室取得成功!
  19. T10 微信公众号如何获得清晰头像?
  20. java Ofd 转图片_一文教你搞懂如何将ofd格式的文件转为图片

热门文章

  1. 又错过了暴富的机会!亚马逊AWS突发Bug,比特币现史诗级捡漏机会?
  2. 小米再被质疑Mimoji抄袭苹果 回应:上传出错 将严肃处理
  3. 填错银行卡号导致放款失败?小心中招钓鱼网贷
  4. 阿里巴巴张勇:创造风口而不是追逐
  5. 拳王虚拟项目公社:人人可操作的轻松简单的虚拟资源课程虚拟项目
  6. Java并发编程之CyclicBarrier
  7. 程序员顶尖和普通就是有5个区别!
  8. 照片宽高比怎么设置_视频号在哪里打开?怎么开通视频号?98页的视频号运营手册请收好...
  9. [知识整理]Linux系统WIFI知识的一些整理
  10. 【FLink】Flink SQL代码生成与UDF重复调用的优化