Класс TM_List можно использовать для хранения списка указателей (на объекты, переменные и т.д.). Данный класс обладает следующими свойствами и методами:
Метод |
Описание |
|---|---|
function Add(Item: Pointer): Integer; |
Добавляет указатель Item в список |
procedure Insert(Index: Integer; Item: Pointer); |
Добавляет указатель Item в список в позицию Index |
procedure Delete(Index: Integer); |
Удаляет из списка элемент с указанным индексом |
function Remove(Item: Pointer): Integer; |
Удаляет из списка указатель Item. Если список содержит несколько таких указателей, то удаляется только первый. Возвращает индекс указателя в списке до его удаления или -1, если указатель не существует в списке. |
procedure Exchange(Index1, Index2: Integer); |
Меняет местами элементы в указанных позициях |
function Extract(Item: Pointer): Pointer; |
Извлекает указатель из списка |
procedure Move(CurIndex, NewIndex: Integer); |
Перемещает указатель из позиции CurIndex в позицию NewIndex |
procedure Clear; |
Очищает список |
function First: Pointer; |
Возвращает первый указатель из списка. Если в списке нет указателей, то будет выдано исключение. |
function Last: Pointer; |
Возвращает последний указатель из списка. Если в списке нет указателей, то будет выдано исключение. |
function IndexOf(Item: Pointer): Integer; |
Возвращает индекс указателя Item в списке. Возвращает -1, если такой указатель не найден. |
procedure Pack; |
Удаляет все нулевые (равные nil) указатели из списка |
Свойство |
Описание |
|---|---|
property Items[Index: Integer]: Pointer; |
Возвращает указатель с индексом Index из списка. Например myList.Items[3] вернет указатель с индексом 3. Это свойство по-умолчанию, поэтому можно использовать короткую запись, например: myList[3]. |
property Count: Integer; |
Возвращает количество указателей в списке |
Пример использования
Допустим нам нужно создать список объектов, добавлять в него разные объекты и работать с ними. Тогда можно создать новый глобальный модуль и объявить в нем список:
interface
var
myList: TM_List; // объявляем список с именем myList
implementation
initialization // во время запуска проекта
myList := TM_List.Create; // создаём список
finalization // во время выключения проекта
FreeAndNil(myList); // !!! обязательно удаляем список
end.
Теперь список myList можно использовать в любом скрипте проекта.
Пример добавления указателей в список
begin
myList.Add(Button1); // добавляем кнопку Button1 в список
myList.Add(Image1); // добавляем изображение Image1 в список
myList.Add(Text1); // добавляем текст Text1 в список
end.
Пример поиска в списке
begin
if myList.IndexOf(Image1) > -1 then
Log_Add('Изображение Image1 есть в списке')
else
Log_Add('Изображение Image1 не найдено списке');
end.
Пример перебора элементов списка
var
I: Integer;
aItem: Pointer;
begin
// проходим в цикле по всем элементам списка
for I := 0 to myList.Count - 1 do
begin
aItem := myList[I]; // берём очередной элемент из списка в aItem
if TObject(aItem) is TM_Image then // если это изображение
TM_Image(aItem).Visible := False; // то скрываем его
end;
end.