zoukankan      html  css  js  c++  java
  • VCL组件之TStrings

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

    Memo.Lines.SaveToFile(SaveDialog.FileName);

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

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

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

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

    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按钮编译并运行程序,运行如下:

    0185

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

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

    Note

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

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

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

    Note

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

    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属性的声明和建立如下:

    var
      Lines: TStrings;
    {...Later}
    Lines := TMemoStrings.Create;

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

    New Term

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

  • 相关阅读:
    2019-9-2-win10-uwp-Markdown
    2018-8-10-控件
    2018-8-10-win10-uwp-dataGrid
    2018-2-13-win10-uwp-hashcash
    2018-2-13-git-cannot-lock-ref
    UCOSIII系统内部任务
    UCOSIII时间片轮转调度
    Keil MDK fromelf生成bin文件
    UCOS内存管理
    uavcan扩展帧格式 zubax
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2328949.html
Copyright © 2011-2022 走看看