Список объектов (TM\_List)

> [HTML Version](list-objects.html)

Класс 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; | Возвращает количество указателей в списке |




**Пример использования**

Допустим нам нужно создать список объектов, добавлять в него разные объекты и работать с ними. Тогда можно создать новый [глобальный модуль](globalmodule.md) и объявить в нем список:

````
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.

````
