Вопрос

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

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

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

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

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

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

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

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

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

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

"Сохранение" и "удаление" одного и того же файла??


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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top