#delphi #delphi-7 #custom-component #readonly #tcollection
#delphi #delphi-7 #пользовательский компонент #доступно только для чтения #tcollection
Вопрос:
Используя delphi 7, у меня есть набор дочерних элементов TCollection / TCollectionItem. Они предназначены для настройки только во время разработки и никогда не должны изменяться во время выполнения. Как я могу это сделать? Во время разработки всегда должны допускаться любые необходимые изменения, но во время выполнения я не хочу иметь возможность добавлять, удалять или переиндексировать какие-либо элементы в коллекции. Свойства каждого из этих элементов, да, я действительно хочу, чтобы они были включены. Но изменение самих элементов должно происходить только во время разработки.
Комментарии:
1. Теперь я понял, я знал, что мне нужно переопределить некоторые методы, просто не знал, какие именно.
2. Кстати, если быть более конкретным, это связано с тем, что в каждый элемент коллекции будет встроен поток, который выполняется во время выполнения, поэтому я не хочу связываться с этими потоками во время их выполнения путем смешивания коллекций.
Ответ №1:
Вы можете переопределить Assign()
и Notify()
методы TCollection
получения уведомлений о добавлениях и удалениях, а также переопределить SetIndex()
метод TCollectionItem
получения уведомлений о переиндексациях. Для добавления / удаления генерируйте исключение, чтобы отклонить операцию (в случае добавления вам придется освободить новый элемент, который был добавлен). Для переиндексации просто выйдите, ничего не делая.
Чтобы отличить время выполнения от времени разработки, просмотрите цепочку владельцев TCollection
(в случае, если она вложена внутри других классов), пока не найдете TComponent
, затем вы можете проверить его ComponentState
свойство на наличие csDesigning
флага.
Комментарии:
1. Спасибо, я знал, что мне нужно переопределить некоторые, просто не знал, какие именно.