VCL组件之TStrings
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属性来访问。下面两行的代码对于编译器来说是一样的:
12Edit
.
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属性的声明和建立如下:
1234var
Lines: TStrings;
{...Later}
Lines := TMemoStrings
.
Create;
这就是为什么Lines属性像TStrings,而实际上并不是这样。
New Term
抽象基类(abstract base class)是不能直接使用的类,使用抽象基类必须建立派生类,而用的是派生类的实例。
VCL组件之TStrings相关推荐
- VCL组件之编辑控件
VCL组件之编辑控件 Note 以后将用两种方式提及组件,以组件的名称或定义组件的VCL类的名称.可以说"Label组件用于--"或说"TLabel用于--", ...
- Delphi中预想不到的代码楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问
Delphi中预想不到的代码 楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问 No.1 Delphi中的In ...
- VCL组件之重要的公用属性
VCL组件之重要的公用属性 所有的组件都有某些公用的属性.例如所有的可视化组件都有Left和Top属性,它决定了组件在窗体上的位置.像Left.Top.Height及Width属性都是不言自明的,在此 ...
- 一个磁性窗体VCL组件的具体实现
一个磁性窗体VCL组件的具体实现 副标题: 作者:佚名 文章来源:大富翁 点击数:52 更新时间:2005-2-25 文:陈达军 日期:2003-10-29 记得<程序员>杂志中曾 ...
- 结合Delphi和Python的优势:使用Delphi VCL组件快速构建超现代的Python本机Windows GUI桌面酷炫用户界面应用
Delphi开发Pyhron GUI 有时您的应用程序需要一个用户界面,但是为Python应用程序制作用户界面最好的方法是什么?输入用于Python的DelphiVCL.VCL是成熟的Windows本 ...
- VCL组件之公用对话框组件
公用对话框是一类非可视的组件,它们都由TDialog类继承而来,存在Dialogs组件面板上.包括: TOpenDialog--打开文件对话框组件,用它选择文件和浏览目录 TSaveDialog--保 ...
- VCL组件之TLabel、TStaticText和TLabeledEdit
TLabel.TStaticText.TLabeledEdit类的继承关系如下: Label组件位于Stantdard组件面板上,属于非窗口控件,不能获得输入焦点.一般用来显示一些用户不能改动 ...
- VCL组件之Name属性
Name属性 Name属性在组件中占重要地位.在前面已经讨论了,在窗体上安放组件时会发生什么.当组件被安放在窗体上,同时考虑下一步动作的同时,Delphi就已经在幕后工作了.Delphi做的一件事是建 ...
- VCL组件之主要方法(Methods)和通用事件(Events)
组件的主要方法(Methods) 大多数组件有20多个公用方法,窗口组件有40多个公用方法可以选择.有趣地是,并不是都被广泛使用.组件的多数功能通过属性来完成.例如,隐蔽一组件,可调用其Hide方法或 ...
最新文章
- 图神经网络从入门到入门
- Transferring GANs: generating images from limited data 论文学习
- nanodet onnx踩坑记录
- 一文带你了解Spring核心接口Ordered的实现及应用
- [翻译] Shimmer
- SpringMVC深度探险(三) —— DispatcherServlet与初始化主线
- 【STM32】SYSTEM文件夹介绍,delay,sys,usart
- SQL优化常用方法9
- springMVC通过spring.xml对属性注入bean值(工厂模式)
- psql 时间日期操作符和函数
- 比Magic Leap快一步,HoloLamp做到了裸眼观看全息图
- matlab blms算法程序,LMS算法Matlab程序
- Android 初级探讨 OOM问题 以及解决优化之道
- 基于FFmpeg接收RTSP的ts流
- VPC2007与VServer2005R2比较
- Django 2.0 报错解决方案----持续更新中
- HDU 2188 (巴什博弈)
- 塔夫斯大学计算机教授,塔夫茨大学工程学院虚拟教室取得成功!
- T10 微信公众号如何获得清晰头像?
- java Ofd 转图片_一文教你搞懂如何将ofd格式的文件转为图片
热门文章
- 又错过了暴富的机会!亚马逊AWS突发Bug,比特币现史诗级捡漏机会?
- 小米再被质疑Mimoji抄袭苹果 回应:上传出错 将严肃处理
- 填错银行卡号导致放款失败?小心中招钓鱼网贷
- 阿里巴巴张勇:创造风口而不是追逐
- 拳王虚拟项目公社:人人可操作的轻松简单的虚拟资源课程虚拟项目
- Java并发编程之CyclicBarrier
- 程序员顶尖和普通就是有5个区别!
- 照片宽高比怎么设置_视频号在哪里打开?怎么开通视频号?98页的视频号运营手册请收好...
- [知识整理]Linux系统WIFI知识的一些整理
- 【FLink】Flink SQL代码生成与UDF重复调用的优化