Был там, сделал это. Я решил похожую проблему, выведя новый класс из класса TListbox, который включал динамический массив записей, которые я хотел сохранить связанными. Вам нужно будет переопределить несколько методов TListbox, чтобы синхронизировать динамический массив с элементами в списке, но у него есть несколько преимуществ. Например, динамический массив записей не должен выделять или освобождать память. Вам просто нужно установить длину массива, равную количеству элементов в вашем списке. (SetLength
) Вы получаете доступ не к записям через указатели, а через индекс. Вы можете просто скопировать записи из одного места в другое в списке, чтобы изменить их порядок.
Недостаток? Это большая функциональность, которую необходимо переопределить, и нелегко проверять наличие ошибок в коде, поскольку она должна работать во время выполнения и во время разработки. Также помните, что вы используете записи, а не классы. Если вместо этого вы используете классы, вам все равно нужно освободить каждый элемент в массиве. Но записи намного менее сложны.