Отвечая на комментарий, объясняющий причину использования фреймов:
Я бы считал фреймы строительными блоками графического интерфейса пользователя с комбинацией существующих компонентов во время разработки с более продвинутыми компонентами. До Delphi 5 можно было использовать TCustomPanel
потомка с дочерними элементами управления и зарегистрировать его как новый компонент, готовый для добавления в форму. Рамки позволяют делать то же самое с меньшими хлопотами.
Они позволяют вам сконцентрироваться на разработке именно той функциональности, которая вам нужна, и не более того. Если все сделано правильно, вы можете затем встроить их в листы управления вкладками, в модальные или немодальные диалоговые окна, в дочерние фреймы MDI и в стандартные фреймы. Вы даже можете добавить несколько из них в одну форму - то, что, вероятно, нельзя сделать со встроенными формами. Дело в том, что для максимального повторного использования часто требуется многоуровневый подход, и фреймы помогают в этом.
Каркас подходит для встраивания с ходу. Форма должна быть адаптирована так, чтобы не отображать строку заголовка и границу, обычно можно переопределить CreateParams()
и соответствующим образом настроить стиль окна. В инспекторе гораздо больше свойств формы, которые просто не имеют смысла для встроенной формы. ИМХО следует использовать самый простой и общий объект, которого хватит. Форма - это нечто большее, чем просто контейнер для встраивания.
OTOH Я не знаю каких-либо недостатков встраивания фрейма, которого не было бы во встраивании формы.
Изменить:
Есть комментарий относительно таких событий, как OnCreate
или OnShow
, которых нет в кадрах. На самом деле, я бы посчитал это еще одним преимуществом фреймов, поскольку у обработчиков событий нет параметров, поэтому многие вещи обязательно жестко запрограммированы в формах.
Рассмотрим случай настроек для каждого пользователя: в OnCreate
доступно не так много информации, поэтому неизменно заканчивается использование константы или имени формы для раздела файла INI, что очень затрудняет или даже делает невозможным повторное использование формы или создать несколько его экземпляров. С другой стороны, с фреймами метод LoadSettings
- очевидный способ сделать это, и он может нести необходимые параметры. Таким образом, управление возвращается туда, где оно принадлежит, контейнеру встроенного фрейма / формы. Повторное использование возможно только в том случае, если поведение можно изменить извне.
Для содержащихся объектов, которые не являются компонентами и требуют управления временем жизни, есть, например, AfterConstruction
и BeforeDestruction
.
person
mghie
schedule
23.09.2009