Delphi TCollection - Можно ли предотвратить изменение элементов во время выполнения? - PullRequest
2 голосов
/ 10 ноября 2011

Используя delphi 7, у меня есть набор потомков TCollection / TCollectionItem.Они предназначены для настройки только во время разработки и никогда не должны изменяться во время выполнения.Как я могу это сделать?Время разработки всегда должно позволять любые необходимые изменения, но во время выполнения я не хочу иметь возможность добавлять, удалять или переиндексировать любые элементы в коллекции.Свойства каждого из этих элементов, да, я хочу, чтобы они были включены.Но изменение реальных предметов должно происходить только во время разработки.

1 Ответ

5 голосов
/ 10 ноября 2011

Вы можете переопределить методы Assign() и Notify() для TCollection, чтобы получать уведомления о добавлении и удалении, и переопределять метод SetIndex() для TCollectionItem, чтобы получать уведомления о переиндексациях.Для добавления / удаления выведите исключение, чтобы отклонить операцию (в случае добавления вам нужно будет освободить новый элемент, который был добавлен).Для переиндексации просто выйдите, ничего не делая.

Чтобы провести различие между временем выполнения и временем разработки, пройдитесь по цепочке Owner TCollection (если она вложена в другие классы), пока не найдетеTComponent, тогда вы можете проверить его ComponentState свойство для флага csDesigning.

...