Вопрос о создании кастомной магистралки (wizard) в Delphi 2009 для использования в качестве базового класса для других компонентов, имеющих дополнительные свойства и события, актуален для разработчиков, работающих с фреймами. Фреймы в Delphi представляют собой специальные компоненты, которые можно использовать для группировки других компонентов, а также для создания пользовательских интерфейсов с наследованием и возможностью расширения функциональности.
Проблема
Разработчик столкнулся с проблемой регистрации кастомного фрейма в Delphi 2009 как магистралки для использования в списке новых элементов. В ходе разработки проекта, ему необходимо, чтобы новый элемент (фрейм) в проекте:
Отображал все свойства и события, добавленные в кастомный фрейм, в Object Inspector.
Наследовал свой интерфейс от кастомного фрейма, а не от TFrame.
Решение
Для отображения свойств и событий в Object Inspector, разработчик зарегистрировал кастомный модуль в среду разработки. Однако, это не работало корректно для фреймов. В Stack Overflow найден ответ, который помог решить часть проблемы:
Затем, для загрузки DFM кастомного фрейма, в конструктор кастомного фрейма была добавлена функция InitInheritedComponent. Но и это решение не сработало. Фрейм по-прежнему создавался пустым в дизайнере, хотя дополнительные свойства и не отображались в Object Inspector.
После ряда экспериментов и изменения конструктора, разработчик пришел к выводу, что необходимо использовать другой подход. В частности, если не регистрировать кастомный модуль в IDE, фрейм отображается корректно, но дополнительные свойства остаются скрытыми.
Альтернативный ответ и предложения
В качестве альтернативного ответа были предложены следующие подходы:
Использование обновления 3, которое могло исправить проблему.
Применение работы обхода, описанного в QC 5230.
Разработка непосредственно от TFrame, с использованием обычного наследования фреймов и регистрацией полученных "финальных" версий в стандартной единице регистрации компонентов.
Также было упомянуто, что при использовании нескольких уровней наследования фреймов важно сначала открыть базовый фрейм в IDE, чтобы избежать проблем с дизайнером.
Подтвержденный ответ
Исходя из обсуждения, подтвержденный ответ заключается в следующем:
Размещение фрейма на форме или на другом фрейме следует делать динамически, а не в дизайнере формы.
Для редактирования элементов управления на фрейме в режиме дизайна, необходимо использовать динамически созданные фреймы на форме в виде компонентов, которые не загружаются из DFM.
Можно использовать фреймы, которые уже вставлены в DFM формы, и с которым можно работать как с отдельным проектом, в рамках отдельной модульной библиотеки (package).
Обратите внимание
Использование AppControls TacEmbeddedForm в сочетании с Greatis Form Designer (или TMS Scripter Studio) может представлять собой возможное решение для создания расширенных возможностей кастомизации в режиме выполнения, что может быть полезной альтернативой стандартным фреймам.
Пример реализации кастомного модуля
procedure Register;
begin
RegisterCustomModule(TMyFrame, TCustomModule);
RegisterPackageWizard(TMyFrameModuleExpert.Create);
end;
Пример использования InitInheritedComponent
constructor TMyFrame.Create(AOwner: TComponent); override;
begin
inherited;
if (ClassType <> TMyFrame) and not (csDesignInstance in ComponentState) then
begin
if not InitInheritedComponent(Self, TMyFrame) then
raise EResNotFound.CreateFmt('Resource %s not found', [ClassName]);
end;
end;
Важные замечания
Убедитесь, что ваш кастомный фрейм доступен в режиме дизайна и содержит необходимые визуальные компоненты, сохраняя их структуры в DFM файле.
При наследовании фреймов внимательно относитесь к первому значению в DFM файле, которое может быть "object" или "inherited".
При необходимости, рассмотрите возможность использования встраиваемых форм для реализации вашей функциональности.
Разработчикам, столкнувшимся с аналогичными проблемами, рекомендуется придерживаться проверенных практик и учитывать опыт коллег, а также не бояться экспериментировать с различными подходами для достижения наилучшего результата.
Разработчик в Delphi 2009 столкнулся с задачей создания кастомного фрейма для использования в качестве базового класса с дополнительными свойствами и событиями, и ему необходимо зарегистрировать его как магистралку для использования в
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.