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^ dobegin
Name := '___Nikolay';
Addr := 'Delphi World';
Comments := 'Автор проекта Delphi World';
Salary := 999000.00;
end;
aList.Add(aRecPtr);
aList.Add(...);
...
for I := 1 to aList.Count dobegin
aRecPtr := PMyRec(aList.Items[I - 1]);
{что-то делаем с записью}end;
{теперь избавляемся от всех записей
и самого списка-объекта}for I := 1 to aList.Count do
Dispose(PMyRec(aList.Items[I - 1]));
aList.Free;
end;
Перевод контента на русский язык:
Код, написанный на языке Delphi, создает список объектов (записи) и затем проходит по списку для выполнения какого-либо действия с каждой записью.
Вот разбивка того, что код делает:
Тип PMyRec объявлен как алиас для типа TMyRec, который является записью, содержащей четыре поля: Name, Addr, Comments и Salary. Пойntер PMyRec будет использоваться для указания на записи этого типа.
Создается список (aList) типа TList, который будет хранить указатели на записи типа TMyRec.
Создается новая запись с помощью оператора New, и указатель на нее сохраняется в переменной aRecPtr. Затем поля этой записи устанавливаются некоторыми значениями.
Запись, указанная aRecPtr, добавляется в список (aList.Add(aRecPtr)).
Затем код добавляет более записей в список (хотя не указывает, какие именно). Это обозначается троеточием в конце строки, где сказано aList.Add(...).
После добавления всех записей код проходит по списку с помощью цикла for и для каждой записи в списке присваивает текущую запись переменной aRecPtr.
Затем код освобождает все записи в списке, повторно проходя по списку и вызывая Dispose(PMyRec(aList.Items[I-1])). Это необходимо потому что записи динамически были выделены с помощью New, поэтому они должны быть вручную освобождены для предотвращения утечек памяти.
Наконец, код освобождает список сам (aList.Free) после того как все его элементы были освобождены.
Альтернативное решение:
varaRec:TMyRec;beginaRec.Name:='Nikolay';aRec.Addr:='Delphi World';aRec.Comments:='Author of Delphi World project';aRec.Salary:=999000.00;withTList.CreatedotryforI:=1to10do// Пусть будет добавлено 10 записей.beginNew(aRec);aRec.Name:=Format('Employee %d',[I]);aRec.Addr:='Some address';// Другие поля...Add(aRec);Dispose(aRec);end;finallyFree;end;end;
В этом альтернативном решении мы создаем записи и добавляем их в список напрямую в цикле. Мы не需要 освобождать каждый запись вручную, потому что они автоматически освобождаются когда список будет освобожден. Это может сделать код чище и проще для чтения.
В статье описывается пример использования компонента TList и record в языке Delphi для создания списка объектов, добавления и удаления записей из списка, а также освобождения занимаемой памяти.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.