Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Визуальное наследование форм в Delphi XE2: редактирование формы-правнука без доступа к коду базовой формы

Delphi , Программа и Интерфейс , Формы

Вопрос пользователя заключается в следующем: имеется две библиотеки компонентов ("Base" и "Descendant") и приложение "Example". Базовая библиотека и приложение могут находиться в одной группе проектов, но библиотека "Descendant" должна быть в другой, без доступа к исходному коду "Base" и "Example". Цель такого разделения - скрыть исходный код базовой библиотеки и приложения от работников, которые будут работать с "Descendant".

Базовая библиотека содержит форму TFormBase с компонентами и кодом. После сборки получаем бинарные файлы, такие как bpl и dcp.

В библиотеке "Descendant" определена форма TFormDescendant, наследующая TFormBase. При этом в дизайне формы TFormDescendant должна сохраняться внешность TFormBase, но можно добавить дополнительные компоненты.

Однако при попытке открыть TFormDescendant в Delphi IDE возникает ошибка: "Ошибка создания формы: Предок для 'TFormBase' не найден". Это происходит потому, что Delphi не может найти описание формы в дизайне времени, так как Base.bpl содержит только бинарный код.

Вопрос: Как открыть TFormDescendant в дизайне времени без доступа к исходному коду TFormBase?

Подтвержденный ответ:

Для решения проблемы можно создать "стабовый" модуль с исходным кодом формы, который будет содержать только интерфейс и описание в формате .dfm, идентичное оригиналу. Это позволит разработчикам сначала открыть стабовую форму, а затем и форму-потомка.

Альтернативный ответ:

Создать промежуточный класс TFormBaseStub, наследующий TFormBase, в библиотеке "Descendant". Сделать TFormDescendant наследником TFormBaseStub. Файл FormBaseStub.dfm будет являться копией TFormBase.dfm, а класс TFormBaseStub - простым потомком TFormBase с тем же интерфейсом.

Однако, при таком подходе возникает ошибка, так как в TFormDescendant и TFormBaseStub описываются одни и те же компоненты, что приводит к конфликту.

Рекомендуется использовать копию оригинального модуля, содержащего TFormBase, но не добавлять его в проект "Descendant". Таким образом, исходный код формы будет доступен, но не включен в проект.

Также было предложено использовать виртуальную файловую систему для загрузки модуля из ресурсов, но отмечено, что FileIntf.pas устарел и требуется поиск альтернативы.

Пример решения:

  1. Создать копию модуля FormBase.pas и назвать его, например, FormBaseStub.pas.
  2. Удалить из копии все реализации методов, кроме интерфейса и описания в формате .dfm.
  3. Сделать TFormDescendant наследником TFormBaseStub.
  4. Скомпилировать FormBaseStub.pas вместе с Descendant.pas, чтобы получить бинарный файл с описанием формы в дизайне времени.
type
  TFormBaseStub = class(TForm)
    // Компоненты и код, соответствующие интерфейсу TFormBase
  end;
type
  TFormDescendant = class(TFormBaseStub)
    // Дополнительные компоненты и переопределения методов
  end;

Таким образом, разработчики смогут редактировать форму-потомка, имея доступ только к бинарным файлам базовой библиотеки.

Создано по материалам из источника по ссылке.

Вопрос связан с проблемой визуального наследования форм в среде разработки Delphi XE2, где необходимо редактировать форму-правнука без доступа к исходному коду базовой формы, с целью скрытия исходного кода базовой библиотеки и приложения от определенной


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 20:51:16/0.0031201839447021/0