Добавление форм и фреймов в пакеты - PullRequest
2 голосов
/ 26 февраля 2009

Я разрабатываю пакет зарегистрированных в IDE компонентов, большинство из которых являются производными от базового класса TFrame. Существуют также различные настраиваемые диалоговые формы, которые вызываются этими компонентами, включенными в пакет. Я работаю в Delphi 2007.

Я замечаю, что иногда элементы фрейма и формы, которые обычно имеют связанный файл DFM, не всегда показывают файл DFM "снизу" (доступный через небольшой [+] расширитель узла дерева) под ними. Если я добавлю существующий файл PAS на основе форм, например, щелкнув правой кнопкой мыши проект BPL (в Диспетчере проектов) -> Добавить, он не отобразит файл DFM в списке.

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

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

Указывает ли это на что-то не так в файле проекта? Я неправильно добавляю существующие формы / фреймы в этот пакет? Если да, то как мне добавить существующие блоки формы / фрейма, чтобы оба файла отображались в списке менеджера проекта?

* ОБНОВЛЕНИЕ *

Из предложения Алена ниже:

Я попытался добавить директиву {$ R * .dfm} к модулю формы, и она не вызвала появление файла DFM при добавлении его в мой пакет / проект BPL. Добавление {$ R * .dfm} к самому файлу проекта (что я не думаю, что вы имели в виду, но я думал, что попробую) тоже не сработало. Эта техника работает только с EXE-проектами?

Возможно (вероятно) связано, попытка построить с этой директивой местами дает мне это:

[Ошибка DCC] E2161 Предупреждение: дубликат ресурса: тип 10 (RCDATA), идентификатор TTESTTREEVIEW; Сохранен ресурс E: \ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm; файл E: \ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm ресурс отброшен.

"Keping" и "отбрасывание" одного и того же файла ??


Позже: похоже, что проблема с «дублированным ресурсом» МОЖЕТ быть связана с это . Не уверен, но по крайней мере в одном случае оба произошли одновременно.

Ответы [ 3 ]

6 голосов
/ 26 февраля 2009

Вегар на правильном пути. Чтобы менеджер проекта отображал узел .dfm, ему необходимо знать, что с файлом pas связан модуль form / frame / datamodule. Он ищет комментарий {Form1} в файле .dpk или .dpr для получения этой информации. Если при добавлении файла в проект среда IDE не распознает, что с ним связан файл .dfm, убедитесь, что файл .pas имеет директиву {$ R * .dfm} в открытом виде. При этом я не должен быть похоронен в IFDEF или иным образом скрыт потенциальными синтаксическими ошибками в файле. IDE использует наличие этой директивы, чтобы решить, стоит ли ей пытаться открыть .dfm в конструкторе.

IDE не просто считает само собой разумеющимся, что если есть Unit1.pas и Unit1.dfm, то они действительно должны быть вместе. Учтите, что вы создали новый модуль формы, и он назывался Unit1. Теперь вы удалили только Unit1.pas, а затем просто пошли и создали новый модуль, которому будет присвоено имя Unit1.pas. Там нет ссылки на старый, устаревший Unit1.dfm на диске из этого нового, с тем же базовым именем, Unit1.pas. Было бы странно и сбивало с толку, если бы IDE просто слепо открывал этот .dfm.

2 голосов
/ 26 февраля 2009

Если вы посмотрите на источник проекта для пакета, вы найдете разницу в разделе Contains:

contains
  Unit2 in 'unit2.pas',
  Unit1 in 'Unit1.pas' {Form1};

Unit2 будет отображаться как единое целое, а unit1 будет отображаться как единица с формой. Как видите, у unit1 есть комментарий {Form1}, которого не хватает unit2.

Я не знаю, возможно ли добавить существующий модуль, чтобы этот комментарий автоматически создавался.

0 голосов
/ 21 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...