Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
551.94 Кб
Скачать

16. Класс Tstrings

Работа многих компонентов построена на имеющемся в их составе свойстве класса Tstrings. Например: Items у ListBox и RadioGroup, Lines у Memo и тд. Этот класс применяется для хранения любых объектов наследников класса Tobject и связанных с ними текстовых строк. Tstrings — абстрактный класс. Обратиться к нему можно лишь при посредничестве соответствующего компонента. Можно создать экземпляр класса Tstrings вне компонентов, используя объект потомок TstringList, наследующий свойства и методы Tstrings:

var SL: TStringList;

begin

SL := TStringList.create; // Но не SL := TString.create!

SL.add(‘Строка’);

end;

К строкам и объектам, хранящимся в TStrings, можно обратиться с помощью индексированных свойств

property Strings[i: integer]: string; default;

property Object [i: integer]: TObject;

Атрибут default означает, что имя индексированного свойства может быть опущено, например, следующие обращения равнозначны:

ListBox1.items.strings[1]:=’Строка’;

ListBox1.items[1]:=’Строка’;

Общее число строк можно определить, обратившись к свойству Count (тип integer) класса TStrings.

Класс TStrings также применяется для хранения пар вида «параметр-значение». При чтении (записи) свойства

property Values[const Name: string]: string;

ищется строка, содержащая подстроку вида Name=значение и возвращается (записывается) значение после символа «=» .

Например, опрератор ListBox1.Items.Values[‘y’]:=1;

приведет к появлению в списке строки y=1.

Основные свойства и методы класса TStrings приведены в таблице:

Property Count: integer;

Число пар строк и объектов.

Function Add(const S: string): integer;

Добавляет строку в конец набора и возвращает присвоенный ей номер.

Function AddObject(const S: string; AObject: Tobject): integer;

Добавляет строку и объект. Возвращает присвоенный паре номер

procedure AddStrings (Strings: TStrings);

Добавляет в конец набора другой набор TSrings.

procedure Clear;

Очищает набор данных и освобождает связанную с ним память.

procedure Delete (I: integer);

Удаляет строку с индексом I.

Function IndexOf (const S: string): integer;

Возвращает номер в наборе строки S. Если она не найдена, функция возвращает -1.

Function Equals (Strings: TStrings): boolean;

Сравнивает набор строк вызвавшего этот метод объекта с набором Strings и возвращает True, если они совпадают.

procedure Move(I1,I2:integer);

Перемещает пару строка–объект с позиции I1 в позицию I2.

procedure Exchange (I1,I2: integer);

Меняет местами пары строка+объект с индексами I1 и I2.

procedure LoadFromFile (const FileName: string);

Загружает набор строк из файла

procedure SaveToFile (const FileName: string);

Сохраняет набор строк в файле

procedure TForm1.Button1Click(Sender: TObject);

begin

(Sender as TControl).visible := False;

ListBox1.Items.AddObject((Sender as TButton).caption, Sender);

end;

procedure TForm1.ListBox1Click(Sender: TObject);

begin

with ListBox1 do

begin

(Items.Objects[ItemIndex] as TButton).visible := true;

Items.Delete(ItemIndex);

end;

Для классов определены операции отношения = и <>. Кроме того, для классов определены еще две операции: as (как) и is (является). Первым операндом в обеих операциях является объект, вторым - класс.

Если A - объект, а C - класс, то выражение A as C возвращает тот же самый объект, но рассматриваемый как объект класса C. Операция даст результат, если указанный класс C является классом объекта A или одним из наследников этого класса. В противном случае будет сгенерировано исключение.

Наиболее часто операция as применяется к параметру Sender, передаваемому во все обработчики событий как объект - источник события и имеющему тип TObject, в котором очень мало свойств для идентификации объекта.

Приведем пример:

if (Sender as TComponent).Name = 'Button2' then ...;

Этот оператор выбирает событие, связанное с компонентом, имеющим имя Button2, и не реагирует на события, связанные с другими компонентами.

Выражение A is C позволяет определить, относится ли объект A к классу C или к одному из его потомков. Если относится, то операция is возвращает true, в противном случае - false. Например, оператор:

if Sender is TButton then ...;

будет реагировать только на объекты класса TButton или потомков этого класса