Delphi DFM не найден
У меня есть одна ссылка на файл xyz.pas в моем проекте. Но этот файл не со мной. У меня есть файл xyz.dcu и xyz.obj этого файла xyz.pas. Когда я пытался скомпилировать проект, я получил сообщение об ошибке "xyz.dcu not found". Поэтому я включил путь xyz.dcu в Путь поиска. Теперь я получаю сообщение об ошибке "xyz.dfm not found".
Пожалуйста, предложите мне решение. Можно ли скомпилировать проект только с файлами.dcu и.obj?
Заранее спасибо. С уважением, Нарен
6 ответов
Я надеюсь, что вы не потеряли свою работу.
Упрощенно, Delphi работает так:
PAS + DFM => DCU
DCU + RES => EXE
Подробнее о файлах Delphi в конце этого ответа.
Вы можете скомпилировать проект, если у вас есть только файл DCU. Сначала удалите файл PAS из вашей папки, иначе Delphi попытается перекомпилировать его (и для его перекомпиляции необходим файл DFM).
Я не думаю, что файл Obj будет вам полезен.
Файл DFM очень важен для вашего проекта, но не является критически важным. Если вам это крайне необходимо, вы все равно можете обойтись без него, поскольку его можно восстановить вручную на основе информации, содержащейся в файле PAS, и на основе того, как выглядит графический интерфейс приложения (если вы когда-либо видели, чтобы он работал).
Вот хитрость (включает в себя некоторую работу):
Просто создайте новую форму, а затем посмотрите в верхней части исходного файла PAS для объявления формы. Это может выглядеть так:
TYPE
TYourForm = class(TForm)
xLabel: TLabel;
yButton: TButton;
etc
etc
end;
Затем верните все эти элементы управления в новую форму и назовите их точно так же, как они названы в файле PAS (xLabel, yButton и т. Д.). Расположите их так, чтобы они напоминали оригинальный графический интерфейс. Когда закончите, замените новый созданный файл PAS на ваш оригинальный файл PAS. ВАЖНО: имя файла DFM и PAS должно совпадать. Скомпилируйте и все готово! Восстановленный графический интерфейс может выглядеть не совсем так, как исходный, но он должен это делать.
Подсказка:
Существуют инструменты, которые могут извлечь файл DFM из DCU/EXE.
Вот некоторые из них: www.delphi2.software.informer.com/download-delphi-extract-dfm
Это вам очень поможет!
.PAS - исходный файл Delphi
PAS должен храниться в Source Control
В Delphi PAS-файлы всегда являются исходным кодом для модуля или формы. Исходные файлы модуля содержат большую часть кода в приложении. Модуль содержит исходный код для любых обработчиков событий, прикрепленных к событиям формы или компонентам, которые она содержит. Мы можем редактировать файлы.pas с помощью редактора кода Delphi. Не удаляйте файлы.pas.
.DCU - Delphi Compiled Unit
Файл скомпилированного модуля (.pas). По умолчанию скомпилированная версия каждого модуля хранится в отдельном файле двоичного формата с тем же именем, что и файл модуля, но с расширением.DCU (Delphi скомпилированный модуль). Например, unit1.dcu содержит код и данные, объявленные в файле unit1.pas. При перестройке проекта отдельные модули не перекомпилируются, если только их исходные файлы (.PAS) не изменились со времени последней компиляции или их файлы.DCU не могут быть найдены. Безопасно удалите файл.dcu, потому что Delphi воссоздает его при компиляции приложения.
.DFM - Delphi Form
DFM должен храниться в Source Control
Эти файлы всегда связаны с файлами.pas. Файл Dfm содержит детали (свойства) объектов, содержащихся в форме. Его можно просмотреть как текст, щелкнув правой кнопкой мыши на форме и выбрав вид как текст из всплывающего меню. Delphi копирует информацию в файлах.dfm в готовый файл кода.exe. При изменении этого файла следует соблюдать осторожность, так как изменения в нем могут помешать среде IDE загрузить форму. Файлы форм могут быть сохранены в двоичном или текстовом формате. Диалоговое окно "Параметры среды" позволяет указать, какой формат вы хотите использовать для вновь создаваемых форм. Не удаляйте файлы.dfm.
источник: delphi.about.com/od/beginners/a/aa032800a.htm
Если вы все еще находитесь в распоряжении исполняемого файла, то вы можете извлечь свой полный и оригинальный файл DFM из ресурсов приложения любым произвольным менеджером ресурсов. Например: XN Resource Editor. В категории RC DATA будет предмет под названием TXYZ.
Delphi 20xx/XE
Обратите внимание, что Delphi сохраняет старые версии ваших файлов в скрытом подкаталоге dir вашего проекта, который называется __history
,
В этом каталоге находятся сохраненные версии ваших.pas,.dfm и других файлов проекта.
Эти файлы создаются каждый раз, когда вы сохраняете изменения на диск.
Выполните поиск на жестком диске для всех файлов, включая скрытые *.~*~
это должно привести к появлению любых резервных файлов, которые у вас могут быть.
Они пропустят последние изменения, которые вы сделали, но, по крайней мере, вам не придется делать все заново.
Delphi 7 и раньше
Delphi 7 сохраняет эти файлы в том же каталоге, что и файлы вашего проекта с .~
расширение.
Файлы DFM содержат "визуальные" аспекты (элементы управления, компоненты, свойства, визуальные элементы, данные...) (скажем) формы. Если PAS-файл (или скомпилированный файл DCU) нуждается в DFM, он должен быть у вас, или вы получите эту ошибку. Думаю, нет другого способа, кроме как иметь DFM.
Исправление (как написано ниже, извините!): Вы можете скомпилировать только DCU-файл, если вы удалите PAS-файл и предоставите ТОЛЬКО DCU-файл. В этом случае файл DCU должен быть скомпилирован с той же версией компилятора, который будет связан с приложением, поскольку компилятор не может перекомпилировать DCU.
Это довольно поздно, но вот что я пришел с.
Моя структура каталогов такая
/ Project
/ Source
/ Unit1.pas
/ Packages
/Delphi2010Berlin
/ MyPackage1.dpk
/ MyPackage2.dpk
/ Library
/ Delphi2010Berlin
/ Win32
/ Debug
/ Release
В папке /Project я создал файл.bat с именем 'dfmcopy.bat'
Все это содержит
@echo off
for /r %1 %%x in (*.dfm) do @copy "%%x" %2 /Y >NUL
Затем в моем посте построить событие для моего.bpl
./../../dfmcopy.bat $(PROJECTPATH)\..\..\Source $(PROJECTPATH)\..\..\Library\$(Platform)\$(Config)
Это рекурсивно скопирует все файлы.dfm, содержащиеся в папке /Source, в папку /Library/{DelphiVersion}/{Platform}/{Config}
Одно предостережение: если у вас есть несколько проектов, которые имеют это событие после сборки, dfms может копироваться снова и снова для каждого проекта. Не знаю, может ли это стать проблемой сейчас.
Я использую apache ant для создания проекта delphi.
Я исправляю ошибку «dfm not found», удаляя все файлы dcu и отделяя выходные файлы компилятора от исходных файлов.
Проблема, вероятно, вызвана неправильным путем к файлам dcus.
<project name ="app1" default = "run">
<property name="delphipath" value="your delphi path"/>
<property name="source" value="C:/ws4d/TStateMachine-master/Tests"/>
<property name="dunit" value="C:/ws4d/dunit-svn"/>
<property name="DCUOUT" value="C:/ws4d/TStateMachine-master/Tests/BIN"/>
<target name="run">
<!-- Compile with Delphi 6 -->
<apply executable="${delphipath}/bin/dcc32.exe" failonerror="true" output="build-dxe10.log" >
<!-- rebuild quiet -->
<arg value="-B"/>
<arg value="-Q"/>
<!-- file paths -->
<arg value="-I${source};{dunit}/src"/>
<arg value="-U${source};{dunit}/src;{delphipath}/lib/win32/release"/>
<arg value="-R${source};{dunit}/src;{delphipath}/lib/win32/release"/>
<arg value="-O${DCUOUT};"/>
<arg value="-N${DCUOUT}"/>
<arg value="-E${DCUOUT}"/>
<!-- all *.dpr files in current directory -->
<fileset dir=".">
<patternset><include name="*.dpr"/></patternset>
</fileset>
</apply>
</target>
</project>