несколько диалогов внутри одного dfm

Я разрабатываю приложение с множеством маленьких, настраиваемых диалогов.

Эти диалоги, например, давать выбор, отображать графики или предлагать дополнительные интерфейсы. В основном они требуют очень мало кода разметки и имеют мало дочерних элементов.

В настоящее время я использую C ++ Builder для Embarcadero’c XE2 RAD Studio, который работает с VCL и генерирует для каждой формы файл .dfm, файл .h и файл .cpp.
Теперь я хотел бы иметь обзор произведенных файлов и объединить их, например, файлы .dfm из нескольких небольших диалогов. (может быть, даже .cpp и .h тоже).
Однако я также хочу использовать C ++ — конструктор VCL для Builder.

Есть ли способ объединить файлы .dfm, и при этом дизайнер IDE работает как обычно?

Или я должен просто динамически генерировать эти диалоги во время выполнения?

1

Решение

Теперь я хотел бы иметь обзор произведенных файлов и объединить их, например, файлы .dfm из нескольких небольших диалогов. (может быть, даже .cpp и .h тоже). Однако я также хочу использовать C ++ — конструктор VCL для Builder.

Есть ли способ объединить файлы .dfm, и при этом дизайнер IDE работает как обычно?

Можно (но не рекомендуется) перемещать реализации обработчика событий, сгенерированные во время разработки, из одного файла .cpp в другой файл .cpp (однако не перемещайте их объявления в файлах .h). Таким образом, вполне возможно иметь 1 .cpp файл со всеми вашими реализациями обработчика событий, и приложение будет работать нормально. Я делаю обратное в одном из моих проектов — у меня есть TForm с большим количеством обработчиков событий, поэтому я перемещаю их в отдельные файлы .cpp, сгруппированные по функциональности (да, я должен использовать TFrame чтобы справиться с этим, но я не могу изменить это на данном этапе развития).

Однако есть побочный эффект — если вы попытаетесь дважды щелкнуть на назначенном событии в Инспекторе объектов, он не сможет найти код реализации обработчика, если вы переместите его.

Тем не менее, что касается DFM, каждый TForm, TFrame, а также TDataModule класс, который создается во время разработки должен есть свой индивидуальный DFM. И IDE, и потоковая система DFM ожидают этого. Ресурсы DFM в конечном исполняемом файле идентифицируются по имени класса, и потоковая система DFM считывает весь ресурс DFM от начала до конца при загрузке DFM в один экземпляр корневого объекта. Кроме того, формат данных DFM не поддерживает несколько DFM в одном потоке ресурсов.

Так что нет, вы не можете объединить несколько DFM вместе.

Или я должен просто динамически генерировать эти диалоги во время выполнения?

Да. Или просто живите, позволяя диалогам использовать индивидуальные ресурсы DFM. Если ваши диалоги действительно настолько малы по содержанию, как вы говорите, накладные расходы на ваш исполняемый файл должны быть минимальными.

2

Другие решения

Вы можете использовать «устаревший» компонент TNotebook (страница «Win3.1» в RAD2007) для имитации множества небольших диалогов в одном файле; это работает как управление страницей без кнопок вкладок. Создайте необходимое количество страниц в компоненте и активируйте нужную страницу в конструкторе формы.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector