Справочник по компонентам Delphi. Часть 1 - Класс TStrings
ОГЛАВЛЕНИЕ
Класс TStrings
Многофункциональный класс, предназначенный для хранения текстовых строк и связанных с ними объектов (любых потомков TObject). TStrings — абстрактный класс; он только описывает методы работы с наборами строк и сопутствующих им объектов, но как именно они хранятся, на его уровне не определено. Его потомки очень многочисленны; они играют основную роль в компонентах-списках (TListBox, TComboBox), редакторе (TMemo) и других. Так что вам чаще всего придется иметь дело с TStrings как со свойством одного из компонентов. В дальнейшем экземпляры этого класса и порожденных от него классов мы-будем называть наборами строк. Для создания собственных наборов строк вне компонентов предназначен потомок TStrings — TStringList, который будет рассмотрен ниже.
К строкам и объектам соответственно можно получить доступ через свойства:
property Strings[Index: Integer]: string; property Objects[Index: Integer]: TObject;
Первое из них является векторным свойством, принимаемым по умолчанию. Общее количество пар в списке равно значению свойства:
property Count: Integer;
Класс TStrings также предназначен для хранения пар вида 'параметр=значение', например, в файлах инициализации (.INI). Эту возможность реализует следующее свойство:
property Values[const Name: string]: string;
При обращении к этому свойству для чтения ищется строка, содержащая подстроку (параметр) Name и символ '='. Если она найдена, возвращается то, что находится в этой строке после '='. Если нет, ValuesfName] равно пустой строке. При записи: если строка, содержащая параметр Name, найдена — ее значение после '=' заменяется новым значением, если нет — строка добавляется. Если существующему параметру присваивается пустая строка (Values[Name] := ";), то он удаляется из набора строк.
Методы класса приведены в таблице:
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 Equals(Strings: TStrings): Boolean; | Сравнивает строки вызвавшего его объекта со строками объекта Strings и возвращает True в случае равенства (сравниваются число строк и все строки попарно). |
function Add(const S: string): Integer- | Добавляет строку S в конец набора и в случае успеха возвращает присвоенный ей индекс (он должен быть равен значению Count до добавления строки). |
function AddObject(const S: string; AObject: TObject): Integer; | Добавляет строку в паре с объектом. Возвращает то же, что и метод Add. |
procedure Exchange(Indexl, Index2: Integer); | Меняет местами пары строка+объект с индексами Indexl и Index2. |
procedure Move(Curlndex, Newlndex: Integer); | Перемещает пару строка+объект с позиции Curlndex в позицию Newlndex. |
procedure InsertObject(Index: Integer; const S: string; AObject: TObject); | Вставляет объект AObject и соответствующую ему строку S в набор под индексом Index. |
Шесть методов предназначены для экспорта/импорта наборов строк:
а) в поток:
procedure LoadFromStream(Stream: TStream); procedure SaveToStream(Stream: TStream);
б) в файл (создавая поток и вызывая два предыдущих метода):
procedure LoadFrornFile (const FileName: strings-procedure SaveToFile(const FileName: string);
в) в данные в формате текстового редактора (подряд расположенные строки, оканчивающиеся парой символов CR/LF (16-ричные коды SOD/SOA)).
procedure AddScrings(Strings: TStrings! ; | Добавляет в конец набора другой набор Strings. |
procedure Assign!Source: T'Persisier-t l ; | Уничтожает прежнее содержимое набора и подставляет вместо него Source, если источник имеет тип TStrings. В противном случае возникает исключительная ситуация EConvertError. |
При этом метод
function GetText: PChar;
выгружает строки в единый массив, где они разделены парами символов CR/LF; в конце такого массива ставится нулевой байт. Размер массива не может превышать 65520 байт; поэтому строки выгружаются до тех пор, пока их суммарная длина не превосходит этого значения.
Метод
procedure SetText(Text: PChar);
читает строки из массива Text.Строки в массиве должны быть отделены друг от друга парой символов CR/LF; допускается и один символ LF (16-ричный код $ОА). Символы с кодами 0, $lA(+) воспринимаются как конец текста. При этом прежнее содержимое набора уничтожается.