Классы TStrings и TStringList

КлассTStrings происходит от классаTPersistent. TStrings = class(TPersistent)

КлассTStrings является абстрактным, он инкапсулирует поля и методы для работы с наборами строк. От него порождены многочисленные специализированные потомки, обслуживающие наборы строк в таких компонентах какTCoaboBox, TListBox, TRichEdit и др. Эти классы (TComboBoxStrings, TListBoxStrings, TRichEditStrings и др.) объявляются в разделеimplementation соответствующих модулей (StdCtrls, ComCtrls и др.) и поэтому скрыты от броузера Delphi и не включены в справочную службу. Единственным доступным наследником класса TStrings является классTStringList - полнофункциональный класс общего назначения для работы с набором строк.

Особенностью классаTStrings и его потомков является то, что элементами наборов служат пары строка-объект, в которых строка - собственно строка символов, а объект - объект любого класса Delphi. Такая двойственность позволяет хранить вTStrings объекты с их описаниями, сортировать объекты, и т.д. Кроме того, в качестве объекта может также выступать потомок от TStrings, что позволяет создавать многомерные наборы строк. Основные свойства классаTStrings представлены в табл. 5.6.

Таблица 5.6

Свойства Описание
property Capacity: Integer read GetCapacity write SetCapacity; Текущая емкость набора строк. Всегда большеCount.
property CommaText: string read GetCommaText write SetCommaText; Служит для установки и получения всего набора строк в вгде единой строки с кавычками и запятыми
property Count: Integer read GetCount; Текущее количество строк в наборе.  
property Names[Index: Integer]: string read GetName; Дя$ строки с индексомIndex возвращает частьКате, если это строкаName=Value,в «ротивном случае возвращает пустую строку.  
property Objects[Index: Integer]: TObject read GetObject write PutObject; Отсрывает доступ к объекту, связанному со строкой с индексомIndex  
property Values(const Name: string]: string read GetValue write SetValue; По частиName отыскивает в наборе и возвращает частьValue для строк вида Nane=Value  
property Strings[Index: Integer]: string read Get write Put; default; Открывает доступ к строке с индексом Index  
property Text: string read GetTextStr write SetTextStr; Интерпретирует набор строк в виде одной длинной строки с разделителями EOLN мехду отдельными строками набора.  
property StringsAdaptes: IstringsAdapter read FAdapter write SetStringsAdapter; Это свойство используется при разработке компонентов, отвечающих стандарту ActiveX.  
Технически классTStrings реалшуется в виде динамического массива указателей. СвойствоCapacity показывает текущую длину этого массива, свойствоCount - количество элементов, занятых в нем. Если при добавлении очередного элементаCount становится равнымCapacity, происходит автоматическое расширение массива на 15 элементов. Основные методы классаTStrings представлены в табл. 5.7. Таблица 5.7  
Свойство Описание  
function Add(const S: string): Integer; virtual; Добавляет строку в набор данных и возвращает ее индекс.  
procedure Append(const S: string); Добавляет строку в набор данных  
function AddObject(const S: string; AObject: TObject): Integer; virtual; Добавляет строку и объект в набор данных  
procedure AddStriags(Strings: TStrings); virtual; Добавляет к текущему новый набор строк  
procec .ire Assign(Source: TPersistent); override; i. Удаляет прежний набор строк и загружает из параметраSource новый набор. В случае неудачи возникает исключение EConvertErrог  
       



procedure BeginUpdate; Устанавливает флаг начала обновлений. До вызоваEndOpdate блокируется сортировка строк, что ускоряет процесс многократного изменения данных.
procedure Clear; virtual; abstract; Очищает набор данных и освобождает связанную с ним память.
procedure Delete(Index: Integer); virtual; abstract; Удаляет элемент набора с индексом Index и освобождает связанную с ним память.
procedure EndOpdate; Сбрасывает флаг изменения и при необходимости сортирует строки
function Equals(Strings: TStrings): Boolean; Сравнивает построчно текущий набор данных с набором Strings и возвращает true, если наборы равны
procedure Exchange(Indexl, Index2: Integer); virtual; Меняет местами элементы с индексами IndexlиIndex2
function GetText: PChar; virtual; Загружает строки из единого массива, в котором они разделены EOLN
function IndexOf(const S: string): Integer; virtual; Для строки S возвращает ее индекс, или -1 если строки нет
function IndexOfName(const Name: string): Integer; virtual; Возвращает индекс первой строки вида Name=Value в которой частьМатесовпадает с параметром.
function IndexOfObject(AObject: TObject): Integer; virtual; Для объекта AObject возвращает индекс строки, или -1, если такого объекта в наборе нет
procedure Insert(Index: Integer; const S: string); virtual; abstract; Вставляет строку в набор и присваивает ей индексIndex.
procedure InsertObject(Index: Integer; const S: string; AObject: TObject); virtual; Вставляет строку и объект в набор и присваивает им индексIndex.
procedure LoadFromFile(const FileName: string); virtual; • Загружает набор из файла
procedure LoadFromS trearn (Stream: TStream); virtual; Загружает набор из потока
procedure Move(CurIndex, Newlndex: Integer); virtual; Перемещает строку из положения Cur Index в положениеNewlndex
procedure SaveToFile(const FileName: string); virtual; Сохраняет набор в файле
procedure SaveToStream(Stream: TStream); virtual; Сохраняет набор в потоке
procedure SetText(Text: PChar); virtual; Выгружает строки в единый массив, в котором они отделяются друг от друга признаком EOLN.

МетодыAdd, Append, Insert, Clear и т.п. - абстрактные, то есть они объявлены в классеTStrings, и таким образом определены во всех потомках. Но каждый потомок самостоятельно реализует то, как располагаются в памяти объекты и строки. В то же время наличие, например, метода Assign позволяет с его помощью копировать наборы данных из одного потомка классаTStrings в другой.

КлассTStringListКлассTStringList происходит от классаTStrings и является уже не абстрактным, а полнофункциональным классом общего назначения для работы с наборами строк. Для этого в нем перекрыты все абстрактные методы класса TStrings, а кроме этого добавлены свойства и методы, перечисленные в табл. 5.8.

Таблица 5.8

Новые свойства и методы Описание
property Duplicates: TDuplieates read FDuplicates write FDuplicates; Управление возможностью размещения в наборе двух и более идентичных строк
property Sorted: Boolean read FSorted write SetSorted; Признак необходимости сортировки строк в алфавитном порядке
property OnChange: TNotifyEvent read FQnChange write FOnChange; Определяет реакцию на изменение набора строк. Возникает после последнего изменения.
property OnChanging: TNotifyEvent read FOaChanging write FOnChanging; Определяет реакцию на изменение набора строк. Возникает до очередного изменения.
property CaseSensitive: Boolean read FCaseSensitive write SetCaseSen3itive; Определяет, учитывается ли регистр при сортировке строк
function Find(const S: string; var Index: Integer): Boolean; virtual; Ищет в наборе строку S и в случае успеха в параметре Index сообщает ее индекс.

Тип свойстваDuplicates определяется как TDuplieates = (duplgnore, dupAecept, dupError); duplgnore - идентичная строка отвергается, программе ничего об этом не сообщается.

dupError - в случае идентичных строк возбуждается исключение dupAecept - идентичность строк при сортировке игнорируется

Наши рекомендации