DFM не найден после реорганизации - PullRequest
0 голосов
/ 01 мая 2019

У меня есть проект Delphi 7 со следующей структурой:

.dpr
foo.pas
*.pas
*.dfm
Bin/
debug/

Большая часть исходного кода, за исключением одного файла, используется совместно другими проектами (хотя это не имеет значения), поэтому я сделал несколькореорганизация, которая выглядит следующим образом:

.dpr
UniqueFile/
    foo.pas
Common/.pas
    *.pas
    *.dfm
Bin/
debug/

Я изменил пути в .dpr с новой структурой, но когда я пытаюсь по какой-то причине скомпилировать, он не может найти один из файлов .dfm в Commonпапка.Отображаемая ошибка:

[Error] File not found: 'SomeFile.DFM'

Однако в этой папке находятся и .pas, и соответствующий .dfm.

Я пропустил какую-то конфигурацию?


РЕДАКТИРОВАТЬ: Этот файл включен в файл .dpr следующим образом:

uses
   ...
   SomeFile in 'Common/SomeFile.pas',
   ...

EDIT2: я скопировал только файл SomeFile.dfm в корневую папку,и это компилируется.Почему-то он все еще ищет этот файл по старому пути?

EDIT3: Я включил то, на что указал @ ken-white, но не повезло.Итак, теперь .dpr выглядит так:

uses
   ...
   SomeFile in 'Common/SomeFile.pas' {ChildFrame},
   ...

Я также дважды проверил эту строку в SomeFile.pas:

{$R *.DFM}

Еще одна вещь, на которую я должен обратить внимание:опция Build работает нормально, но не компилируется.

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

В вашем файле .dpr отсутствует запись для формы, в которой сообщается, что в среде IDE есть связанный файл .dfm.

При создании нового приложения VCL Forms среда IDE записывает следующую запись в файл проекта:

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

Информация {Form1} указывает IDE искать файл .DFM, который содержит информацию о форме. Вы сказали, что файл .pas находится в вашей новой папке Common, но не сказали, что он также должен искать там файл .dfm. Среда IDE ищет его в папке проекта и не может найти его там. Пока, конечно, вы не скопируете его в папку проекта. : -)

Измените .dpr на

uses
   ...
   SomeFile in 'Common/SomeFile.pas' {FormClass},

заменив {FormClass} именем переменной формы из вашего SomeFile блока.

1 голос
/ 01 мая 2019

Мне кажется, что ваша проблема (по крайней мере, на данный момент) в том, что вы используете прямую косую черту вместо обратной.

uses
   ...
   SomeFile in 'Common/SomeFile.pas' {ChildFrame},
   ...

... должно быть вместо ...

uses
   ...
   SomeFile in 'Common\SomeFile.pas' {ChildFrame},
   ...
...