На этом шаге мы рассмотрим свойства, методы и события класса
TStringList.
Этот класс объединяет в себе свойства TStrings и TList
простейшим способом:
указатель на объект и соответствующая строка объединяются в запись,
указатель на которую
хранится в списке. В классе переопределены многие виртуальные
методы TStrings: Add,
Clear, Delete, Exchange, IndexOf, Insert. Он является полностью
функциональным: можно
создавать экземпляры TStringList в своей программе для работы с
наборами строк и объектов
(помимо тех, которые уже есть в компонентах).
Перечислим новые возможности этого класса:
- сортировка строк в списке;
- запрещение хранения дубликатов строк;
- реакция на изменение содержания списка.
Кроме унаследованных от TStrings,
определены дополнительно следующие полезные свойства.
автоматически сортироваться по алфавиту.
TDuplicates = (dupIgnore, dupAccept, dupError); - свойство определяет, что
происходит при попытке добавить в список дубликат уже имеющейся строки:
ситуации EListEiror;
случае при поиске в не отсортированном списке
не определено, которая из строк будет найдена первой.
property OnChanging: TNotifyEvent; - два свойства, предусмотренные для
определения пользователем своей
реакции на изменение данных. Событие OnChanging вызывается во
многих рассмотренных выше
методах до внесения первого изменения, OnChange - после последнего.
Кроме унаследованных от TStrings,
определены дополнительно полезные методы.
наборе строку S и в
случае успеха возвращает результат True, а в параметре Index -
ее индекс.
добавить или вставить элемент в отсортированный список
вызывает исключительную ситуацию EListError. В этом случае до
выполнения добавления свойству
Sorted нужно присвоить значение False.
Приведем пример приложения, где используются компоненты класса
TStringList.
Внешний вид приложения показан на рисунке 1:
Рис.1. Внешний вид приложения
На форме расположен компонент TMemo, который используется для
отображения
списка. Компонент TEdit предназначен для размещения строки, которая
затем
добавляется в список. Обратите внимание, что после сортировки списка, его
необходимо
снова отобразить в компоненте TMemo.
Приведем тексты обработчиков событий:
Unit Un_23_1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Edit1: TEdit; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Label2: TLabel; Label3: TLabel; Button4: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; List: TStringList; //Указатель на список. implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin List:=TStringList.Create; //Создание списка. end; //Обработчик события добавления строки в список. procedure TForm1.Button1Click(Sender: TObject); begin List.Append(Edit1.Text); //Добавление строки в список. Edit1.Text:=''; //Очистка строки. Edit1.SetFocus; //Передача фокуса. end; //Обработчик события заполнения компонента TMemo. procedure TForm1.Button2Click(Sender: TObject); var k: Integer; begin Memo1.Lines.Clear; //Очистка TMemo. for k:=0 to List.Count-1 do Memo1.Lines.Add(List.Strings[k]); end; procedure TForm1.FormActivate(Sender: TObject); begin Edit1.SetFocus; //Передача фокуса. end; procedure TForm1.FormDestroy(Sender: TObject); begin List.Free; //Уничтожение списка. end; //Поиск заданной строки в списке. procedure TForm1.Button3Click(Sender: TObject); var Index: Integer; begin if List.Find(Edit1.Text, Index) Then //Есть такая строка. Label3.Caption:=' '+IntToStr(Index) else //Неуспешный поиск. Label3.Caption:=' Такой строки нет!!!'; end; procedure TForm1.Button4Click(Sender: TObject); begin List.Sort; //Сортировка списка. end; end.
Текст этого примера можно взять здесь.
На следующем шаге мы рассмотрим состав класса TStream.