
- •12.1. Класи й об’єкти. Основні поняття
- •12.2.Опис класів і об’єктів
- •12.3. Складові класів
- •12.4. Поняття успадкування
- •12.4. Поліморфізм. Віртуальні та динамічні методи
- •12.5. Структура опису класу
- •13. Класи загального призначення
- •13.1. Клас exception –- обробки виключень
- •13.2. Клас tlist – списки
- •13.3. Класи tstrings, tstringlist – набори рядків й об’єктів
13.3. Класи tstrings, tstringlist – набори рядків й об’єктів
Абстрактний клас TStrings інкапсулює поля й методи для роботи з наборами рядків. Від нього породжені численні спеціалізовані нащадки, що обслуговують набори рядків у таких компонентах, як TComboBox, TListBox, TRichEdit та ін.
Особливістю TStrings і його нащадків є та обставина, що елементами наборів служать пари рядок-об'єкт, у яких рядок - це рядок символів, а об'єкт - об'єкт будь-якого класу Delphi. Така подвійність дозволяє зберігати в TStrings об'єкти з текстовими примітками, упорядковувати об'єкти, відшукувати потрібний об'єкт за його описом та ін. Крім цього, в якості об'єкту може використовуватися потомок від TStrings, що дозволяє створювати багатовимірні набори рядків.
Потомком абстрактного класу TStrings є повно функціональний, клас TStringList, призначений для роботи з наборрами рядків.
Клас TStringList містить засоби обслуговування рядків виду Name=Value, де Name - ім'я параметра, Value - його значення.
Властивості класу TStringList |
|
Властивості |
Призначення |
Proporty Capacity: Integer; |
Поточна ємність набору рядків. |
Property CommaText: String; |
Служить для установки або одержання всього набору рядків у вигляді єдиного рядка з лапками й комами. |
Property Count: Integer; |
Поточна кількість рядків у наборі. |
Property Duplicates: TDuplicates; |
Властивість, що дозволяє управляти можливістю розміщення в наборі двох і більше ідентичних рядків. |
Property Names[Index: integer] : String; |
Для рядка з індексом Index повертає частина Name, якщо це рядок виду Name-Value, у противному випадку повертає порожній рядок |
Property Objects[Index: Integer] : TObject; |
Відкриває доступ до об'єкта, зв’заного з рядком з індексом Index. |
Property Sorted: Boolean; |
Ознака необхідності сортування рядків за абеткою. |
Property Strings[Index: Integer] : String; |
Доступ до рядка з індексом Index. |
Property StringsAdapter: TStringsAdapter; |
Ця властивість використовується тільки при розробці компонентів, що відповідають стандарту Active. |
Property Text: String; |
Інтерпретує набір рядків у вигляді одного довгого рядка із внутрішніми роздільниками EOLN між окремими рядками набору. |
Property OnChange:TNotifyEvent; |
Визначає реакцію на зміну набору рядків. Виникає після останньої зміни. |
Набір рядків технічно реалізується подібно до списку TList - у вигляді масиву вказівників. Властивість Capacity показує довжину цього масиву, а властивість Count – поточну кількість елементів. Якщо при додавані чергового елемента Capacity виявиться менше ніж Count, то відбувається автоматичне розширення масиву. При цьому в динамічній пам'яті резервується місце для розміщення Capacity+16 вказівників, у новий масив переписується вміст старого масиву, після чого старий масив знищується. Якщо відома кількість елементів у створюваному наборі рядків, то має сенс заздалегідь установити властивість Capacity, щоб скоротити непродуктивні витрати на багаторазові розширення масиву вказівників.
Властивість CommaText інтерпретує вміст набору рядків у вигляді одного довгого рядка з елементами виду "Перший рядок", "Другий рядок", "Третій рядок" і т.д. (кожен рядок набору заклечається у в подвійні лапки й відокремлюється від сусіднього рядка комою; якщо в рядку зустрічається символ «"», то він подвоюється).
Властивість Text інтерпретує вміст набору у вигляді одного довгого рядка з елементами, розділеними стандартною ознакою EOLN (# 13 # 10).
При значені властивості Sorted=False рядки набору автоматично сортуються за абеткою. При цьому властивість Duplicates розв’язує колізію, пов'язану з додаванням у набір ідентичних рядків. Якщо Duplicates= duIgnore, ідентичний рядок відкидається й повідомлення не виводиться; якщо Duplicates=duError, збуджується виключення EListError; значення Duplicates=duAccept дозволяє вставляти в набір скільки завгодно ідентичних рядків.
Методи класу TStringList |
|
Методи |
Призначення |
Function Add(const S: String): Integer; |
Додає рядок у набір даних і повертає їх індекс. |
function AddObject(const S: string; aObject: TObject): Integer; |
Додає рядок й об'єкт у набір даних. |
Procedure AddStrings( Strings:TStrings); |
Додає до поточного набору новий набір рядків. |
Procedure Assign(Source: TPersistent); |
Знищує колишній набір рядків і завантажує з Source новий набір. У випадку невдачі виникає виключення EConvertError. |
procedure Clear; |
Очищає набір даних і звільняє пов'язану з ним пам'ять. |
procedure Delete(Index: Integer) ; |
Знищує елемент набору з індексом Index і звільняє пов'язану з ним пам'ять. |
function Equals(Strings: TStrings): Boolean; |
Порівнює по рядках поточний набір даних з набором Strings і повертає True, якщо набори ідентичні. |
procedure Exchange(Indexl, Index2: Integer); |
Міняє місцями рядки з індексами Indexl й Index2. Якщо об'єкт сортується (Sorted - True), викликає виключення EStringListError. |
function Find(const S: String; var Index: Integer): Boolean; |
Шукає в наборі рядок S й у випадку успіху в параметрі Index повертає індекс. |
Function GetText: PChar; |
Завантажує рядки з єдиного масиву, у якому вони відокремлюються один від одного ознакою EOLN. |
function IndexOf(const S: String): Integer; |
Для рядка S повертає індекс або -1, якщо такого рядка у наборі немає. |
function IndexOfObject(aObject: TObject): Integer; |
Для об'єкта aObject повертає індекс або -1, якщо такого об'єкта в наборі немає. |
procedure Insert(Index: Integer; const S: String); |
Вставляє рядок у набір і присвоює йому індекс Index. |
procedure InsertObject(Index: Integer; const S: String; aObject: TObject) |
Вставляє рядок й об'єкт у набір і присвоює їм індекс Index. |
procedure LoadFromFile(const FileName: String); |
Завантажує набір з файлу. |
procedure Move(CurIndex, NewIndex: Integer); |
Переміщає рядок з положення CurIndex у положення NewIndex. |
procedure SaveToFile(const FileName: String); |
Зберігає набір у файлі. |
procedure SaveToStream(Stream: TStream); |
Зберігає набір у потоці. |
procedure SetText(Text: PChar); |
Вивантажує рядки у єдиний масив, у якому вон відокремлюються один від другого ознакою EOLN. |
Function Add(const S: String): Integer; |
Додає рядок у набір даних і повертає їх індекс. |
|
function AddObject(const S: string; aObject: TObject): Integer; |
Додає рядок й об'єкт у набір даних. |
|
Procedure AddStrings( Strings:TStrings); |
Додає до поточного набору новий набір рядків. |
|
procedure Assign(Source: TPersistent); |
Знищує колишній набір рядків і завантажує з Source новий набір. У випадку невдачі виникає виключення EConvertError. |
|
procedure Clear; |
Очищає набір даних і звільняє пов'язану з ним пам'ять. |
|
procedure Delete(Index: Integer) ; |
Знищує елемент набору з індексом Index і звільняє пов'язану з ним пам'ять. |
|
function Equals(Strings: TStrings): Boolean; |
Порівнює по рядках поточний набір даних з набором Strings і повертає True, якщо набори ідентичні. |
|
procedure Exchange(Indexl, Index2: Integer); |
Міняє місцями рядки з індексами Indexl й Index2. Якщо об'єкт сортується (Sorted - True), викликає виключення EStringListError. |
|
function Find(const S: String; var Index: Integer): Boolean; |
Шукає в наборі рядок S й у випадку успіху в параметрі Index повертає індекс. |
|
Function GetText: PChar; |
Завантажує рядки з єдиного масиву, у якому вони відокремлюються один від одного ознакою EOLN. |
|
function IndexOf(const S: String): Integer; |
Для рядка S повертає індекс або -1, якщо такого рядка у наборі немає. |
|
function IndexOfObject(aObject: TObject): Integer; |
Для об'єкта aObject повертає індекс або -1, якщо такого об'єкта в наборі немає. |
|
procedure Insert(Index: Integer; const S: String); |
Вставляє рядок у набір і присвоює йому індекс Index. |
|
procedure InsertObject(Index: Integer; const S: String; aObject: TObject) |
Вставляє рядок й об'єкт у набір і присвоює їм індекс Index. |
|
procedure LoadFromFile(const FileName: String); |
Завантажує набір з файлу. |
|
procedure Move(CurIndex, NewIndex: Integer); |
Переміщає рядок з положення CurIndex у положення NewIndex. |
|
procedure SaveToFile(const FileName: String); |
Зберігає набір у файлі. |
|
procedure SaveToStream(Stream: TStream); |
Зберігає набір у потоці. |
|
procedure SetText(Text: PChar); |
Вивантажує рядки у єдиний масив, у якому вон відокремлюються один від другого ознакою EOLN. |