Класс TStringList
Обратите внимание, что в параметре AObject необходимо передавать указатель на объект. Проще всего это сделать таким образом:
SomeStrings.AddObject('Someltem', TCityProps.Create);
Или же так:
var SPb: TCityProps; … SPb: = TCityProps.Create; {Создание объекта} SPb.Population: = 5000000; … SomeStrings.Strings[i]: = 'Санкт-Петербург'; SomeStrings.Objects[i]: = SPb; (Связывание объекта и строки}
Можно поступить и подобным образом (помните, что строка уже должна существовать):
… SomeStrings.Strings[i]: = 'Санкт-Петербург'; SomeStrings.Objects[i]: = TCityProps.Create; (SomeStrings.Objects[i] as TCityProps).Population: = 5000000; …
Аналогично методу insert, элемент и связанный с ним объект можно вставить в произвольное место списка методом:
procedure InsertObject(Index: Integer; const S: string; AObject: TObject);
При перемещении методом Move вместе с элементом переносится и указатель на связанный объект.
Обратите внимание на две особенности, связанные с удалением указателей на объекты и самих связанных объектов.
При удалении элемента списка удаляется только указатель на объект, а сам объект остается в памяти. Для его уничтожения следует предпринять дополнительные усилия:
… for i: = 0 to SomeList.Count – 1 do SomeList.Objects[i].Destroy; …
Если при удалении связанного объекта необходимо выполнить некоторые действия, предусмотренные в деструкторе, приведение типов:
TCityProps(SomeList.Objects[i]).Destroy;
Выполнять не обязательно – нужный деструктор будет вызван автоматически, хотя в данном случае приведение типов ошибкой не является.
Метод:
procedure Clear; override;
Полностью очищает список, удаляя все его элементы.
Помимо перечисленных, класс TStringList обладает рядом дополнительных свойств и методов. Вспомогательные свойства класса обеспечивают разработчика информацией о состоянии списка. Дополнительные методы осуществляют поиск в списке и взаимодействие с файлами и потоками.
Свойство только для чтения:
property Count: Integer;
Возвращает число элементов списка.
Так как основу списка составляет динамический массив, то для него в процессе работы должна выделяться память. При добавлении в список новой строки память для нее выделяется автоматически. Свойство:
property Capacity: Integer;
Определяет число строк, для которых выделена память. Вы можете самостоятельно управлять этим параметром, помня при этом, что значение Capacity всегда должно быть больше или равно значению Count.