На этом шаге мы рассмотрим свойства, методы и события класса
TStrings.
Свойства класса TStrings
Методы класса TStrings
Многофункциональный класс, предназначенный для хранения текстовых строк и связанных с ними объектов (любых потомков TObject). TStrings - абстрактный класс; он только описывает методы работы с наборами строк и сопутствующих им объектов, но как именно они хранятся, на его уровне не определено. Его потомки очень многочисленны; они играют основную роль в компонентах-списках (TListBox, TComboBox), редакторе (TMemo) и других.
Так что чаще всего приходится иметь дело с TStrings как со свойством одного из компонентов. В дальнейшем экземпляры этого класса и порожденных от него классов будем называть наборами строк. Для создания собственных наборов строк вне компонентов предназначен потомок TStrings - TStringList, который будет рассмотрен на следующем шаге.
Таким образом, класс TStrings содержит методы и свойства, позволяющие манипулировать со списками строк:
Ниже приведен список основных свойств, определенных в TStrings.
Свойство | Описание |
---|---|
property Capacity: Integer; | Указывает число строк, которые может содержать список. В классе TStrings чтение Capacity возвращает значение Count, а запись значения Capacity ничего не изменяет в списке. Но в некоторых классах, производных от TStrings, свойство Capacity позволяет заранее выделить память для добавления нескольких строк. |
property CommaText: String; | Возвращает текст, в котором отдельные строки объединены в одну строку формата SDF (System Data Format). Отдельные исходные строки разделяются в итоговой строке запятыми. Каждая строка, если в ней имеются пробелы, заключается в двойные кавычки. Если в исходных строках были двойные кавычки, то они дублируются (получается два следующих друг за другом символа). |
property Count: Integer; | Число строк в списке. Свойство только для чтения. |
property Names [Index: Integer]: String; | Применяется для списков, имеющих структуру "Имя=Значение". Такую структуру имеют, например, файлы INI. Свойство Names возвращает Имя, использованное в строке с указанным индексом. Если строка не имеет форму "Имя=Значение", то возвращается пустая строка. Свойство только для чтения. |
property Objects [Index: Integer]: TObject; | Возвращает объект, связанный с указанной строкой свойства Strings. В классе TStrings свойство Objects не используется, но может применяться в некоторых классах, производных от TStrings. |
property Strings[Index: Integer]: String; | Текст строки с указанным индексом. Индекс первой строки равен 0. |
property Text: String; | Представляет весь список как одну строку, внутри которой используются разделители CR/LF ("перевод строки - возврат каретки"). |
property Values [const Name: String]: String; | Применяется для списков, имеющих структуру "Имя=Значение". Такую структуру имеют, например, файлы INI. Свойство Values возвращает Значение, использованное в строке с указанным именем Name. Если заданное имя Name не найдено, то возвращается пустая строка. При записи: если строка, содержащая параметр Name, найдена - ее значение после знака "=" заменяется новым значением, если нет - строка, добавляется. Если существующему параметру присваивается пустая строка (Values[Name]:='';), то он удаляется из набора строк. |
Методы класса приведены в следующей таблице:
Метод | Описание |
---|---|
procedure AddStrings (Strings: TStrings); | Добавляет в список группу строк из другого объекта Strings типа TStrings. |
procedure Assign (Source: TPersistent); | Уничтожает прежнее содержимое набора и подставляет вместо него Source, если источник имеет тип TStrings. В противном случае возникает исключительная ситуация EConvertError. |
procedure BeginUpdate; procedure EndUpdate; |
Пара процедур, которые устанавливают и сбрасывают флаг обновления набора. Между ними, для ускорения работы, нужно заключать все операции по копированию, удалению и т. д. большого количества элементов. |
procedure Clear; | Очищает список. |
procedure Insert (Index: Integer; const S: string); | Вставляет строку S под номером Index. |
procedure Delete (Index: Integer); | Удаляет строку с номером Index. |
function IndexOf (const S: string): Integer; | Возвращает индекс (номер в наборе) строки S. Если она не найдена, функция возвращает -1. |
function IndexOfObject (AObject: TObject): Integer; | Возвращает индекс первой строки, связанной с заданным объектом. Если такой строки нет в списке, возвращается -1. |
function IndexOfName (const Name: String): Integer; | Применяется для списков, имеющих структуру "Имя=Значение". Возвращает номер строки, в которой Имя равно заданному значению Name. Если такой строки нет в списке, возвращается -1. |
function Equals (Strings: TStrings): Boolean; | Сравнивает строки вызвавшего его объекта со строками объекта Strings и возвращает True в случае равенства (сравниваются число строк и все строки попарно). |
function Add (const S: string): Integer; | Добавляет строку S в конец набора и в случае успеха возвращает присвоенный ей индекс (он должен быть равен значению Count до добавления строки). |
function AddObject (const S: string; AObject: TObject): Integer; | Добавляет в список строку и связанный с ней объект. Возвращает индекс добавленной строки и объекта. |
procedure Append (const S: string); | Добавляет строку в конец списка. Метод аналогичен Add, но не возвращает индекс строки. |
procedure Exchange (Index1, Index2: Integer); | Меняет местами пары "строка-объект" с индексами Index1 и Index2. |
procedure Move (CurIndex, NewIndex: Integer) ; | Перемещает пару "строка-объект" с позиции CurIndex в позицию NewIndex. |
procedure InsertObject (Index: Integer; const S: string; AObject: TObject); | Вставляет объект AObject и соответствующую ему строку S в набор под индексом Index. |
Следующие шесть методов предназначены для экспорта/импорта наборов строк:
function GetText: PChar;
выгружает строки в единый массив, где они разделены парами символов CR/LF; в конце такого массива ставится нулевой байт. Размер массива не может превышать 65520 байт; поэтому строки выгружаются до тех пор, пока их суммарная длина не превосходит этого значения.
Метод:
procedure SetText (Text: PChar);
читает строки из массива Text. Строки в массиве должны быть отделены друг от друга парой символов CR/LF; допускается и один символ LF (16-ричньй код $0А). Символы с кодами 0, $1A (<Ctrl>+<Z>) воспринимаются как конец текста. При этом прежнее содержимое набора уничтожается.
На следующем шаге мы рассмотрим состав класса TStringList.