Вот быстрое сравнение компонентов и фреймов Delphi, и в конце мой вопрос.
Преимущества компонентов Delphi:
- Они хорошо инкапсулированы. Программное обеспечение, использующее компоненты, может получить доступ только к
public
иpublished
свойствам компонентов. - Все их внутренние обработчики событий доступны во время разработки родительской формы.
Недостатки компонентов Delphi:
- Их нужно установить с каким-то пакетом
- Пакет совместно используется несколькими приложениями, даже если компоненты внутри относятся к конкретному приложению.
Преимущества фреймов Delphi:
- Их можно размещать на форме как компоненты.
- Их
published
свойства также можно настроить в форме - Они доступны только в приложении и недоступны для остальных приложений, которым они не принадлежат.
- Они доступны быстро. Устанавливать не нужно.
Недостатки фреймов Delphi:
- Все их внутренние компоненты напрямую доступны в родительской форме. Если я перемещу компоненты из раздела
published
, настройки времени разработки также будут нарушены в конструкторе фреймов. - Если я переопределю метод
Resize
во фрейме, все аранжировки будут доступны только во время выполнения. Никаких договоренностей во время разработки не делается. - Если я введу новое свойство
published
, оно будет недоступно в инспекторе объектов.
Я бы хотел нечто симбиотическое:
- Хорошая инкапсуляция. Ни один из внутренних компонентов недоступен из родительской формы, но все их внутренние компоненты полностью функциональны либо во время выполнения, либо во время разработки.
- Быстрая доступность. Устанавливать не нужно.
- Только в приложении. Нет обмена с другими приложениями.
- Их опубликованные свойства можно изменить в форме
- Все переопределения методов (особенно метод изменения размера) доступны во время разработки.
Не могли бы вы предложить вещь, отвечающую этим требованиям? Или может быть какой-то удивительный метод работы с кадрами, о которых я не знал?
Это не обязательно должна быть рама или компонент. Если некоторые другие классы VCL удовлетворяют этим требованиям, я с благодарностью приму это.