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

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

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

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

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

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

2 ответа

Решение

Теперь я хотел бы сохранить обзор созданных файлов и объединить, например, файлы.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. Если ваши диалоги действительно настолько малы, как вы говорите, накладные расходы на ваш исполняемый файл должны быть минимальными.

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

Другие вопросы по тегам