Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Список объектов

Delphi , Компоненты и Классы , Списки

Список объектов


type
  PMyRec = TMyRec;
  TMyRec = record
    Name: string[40];
    Addr: string[25];
    Comments: string;
    salary: Double;
  end;

var
  aList: TList;
  aRecPtr: PMyRec;
  I: Integer;
begin
  aList := TList.Create;
  New(aRecPtr);
  with aRecPtr^ do
  begin
    Name := '___Nikolay';
    Addr := 'Delphi World';
    Comments := 'Автор проекта Delphi World';
    Salary := 999000.00;
  end;
  aList.Add(aRecPtr);
  aList.Add(...);
  ...
  for I := 1 to aList.Count do
  begin
    aRecPtr := PMyRec(aList.Items[I - 1]);
    {что-то делаем с записью}
  end;

  {теперь избавляемся от всех записей
  и самого списка-объекта}

  for I := 1 to aList.Count do
    Dispose(PMyRec(aList.Items[I - 1]));
  aList.Free;
end;

Перевод контента на русский язык:

Код, написанный на языке Delphi, создает список объектов (записи) и затем проходит по списку для выполнения какого-либо действия с каждой записью.

Вот разбивка того, что код делает:

  1. Тип PMyRec объявлен как алиас для типа TMyRec, который является записью, содержащей четыре поля: Name, Addr, Comments и Salary. Пойntер PMyRec будет использоваться для указания на записи этого типа.

  2. Создается список (aList) типа TList, который будет хранить указатели на записи типа TMyRec.

  3. Создается новая запись с помощью оператора New, и указатель на нее сохраняется в переменной aRecPtr. Затем поля этой записи устанавливаются некоторыми значениями.

  4. Запись, указанная aRecPtr, добавляется в список (aList.Add(aRecPtr)).

  5. Затем код добавляет более записей в список (хотя не указывает, какие именно). Это обозначается троеточием в конце строки, где сказано aList.Add(...).

  6. После добавления всех записей код проходит по списку с помощью цикла for и для каждой записи в списке присваивает текущую запись переменной aRecPtr.

  7. Затем код освобождает все записи в списке, повторно проходя по списку и вызывая Dispose(PMyRec(aList.Items[I-1])). Это необходимо потому что записи динамически были выделены с помощью New, поэтому они должны быть вручную освобождены для предотвращения утечек памяти.

  8. Наконец, код освобождает список сам (aList.Free) после того как все его элементы были освобождены.

Альтернативное решение:

var
  aRec: TMyRec;

begin
  aRec.Name := 'Nikolay';
  aRec.Addr := 'Delphi World';
  aRec.Comments := 'Author of Delphi World project';
  aRec.Salary := 999000.00;

  with TList.Create do
  try
    for I := 1 to 10 do // Пусть будет добавлено 10 записей.
    begin
      New(aRec);
      aRec.Name := Format('Employee %d', [I]);
      aRec.Addr := 'Some address';
      // Другие поля...
      Add(aRec);

      Dispose(aRec);
    end;
  finally
    Free;
  end;
end;

В этом альтернативном решении мы создаем записи и добавляем их в список напрямую в цикле. Мы не需要 освобождать каждый запись вручную, потому что они автоматически освобождаются когда список будет освобожден. Это может сделать код чище и проще для чтения.

В статье описывается пример использования компонента TList и record в языке Delphi для создания списка объектов, добавления и удаления записей из списка, а также освобождения занимаемой памяти.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 17:41:32/0.003838062286377/0