Delphi DFM не найден - PullRequest
       18

Delphi DFM не найден

5 голосов
/ 01 июня 2011

У меня есть одна ссылка на файл xyz.pas в моем проекте. Но этот файл не со мной. У меня есть файлы xyz.dcu и xyz.obj этого файла xyz.pas. Когда я пытался скомпилировать проект, я получил сообщение об ошибке «xyz.dcu not found». Поэтому я включил путь xyz.dcu в Путь поиска. Теперь я получаю сообщение об ошибке "xyz.dfm not found".

Пожалуйста, предложите мне решение. Можно ли скомпилировать проект только с файлами .dcu и .obj?

Спасибо заранее. С Уважением, Naren

Ответы [ 5 ]

5 голосов
/ 01 июня 2011

Надеюсь, вы не потеряли свою работу.

Упрощенно, 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

3 голосов
/ 01 июня 2011

Если вы все еще имеете доступ к исполняемому файлу, вы можете извлечь свой полный и оригинальный файл DFM из ресурсов приложения любым произвольным менеджером ресурсов. Например: Редактор ресурсов XN . В категории RC DATA будет предмет под названием TXYZ.

2 голосов
/ 01 июня 2011

Delphi 20xx / XE
Обратите внимание, что Delphi сохраняет старые версии ваших файлов в скрытом подкаталоге dir вашего проекта с именем __history.

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

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

Delphi 7 и ранее
Delphi 7 сохраняет эти файлы в том же каталоге, что и файлы проекта с расширением .~.

1 голос
/ 01 июня 2011

DFM-файлы содержат «визуальные» аспекты (элементы управления, компоненты, свойства, визуальные элементы, данные ...) (скажем) формы.Если PAS-файл (или скомпилированный файл DCU) нуждается в DFM, он должен быть у вас, или вы получите эту ошибку.Я думаю, что нет другого способа, кроме как иметь DFM.

Исправление (как написано ниже, извините!): Вы можете скомпилировать только DCU-файл, если вы удалите PAS-файл и предоставите ONLY DCU-Файл.В этом случае файл DCU должен быть скомпилирован с той же версией компилятора, который будет связан с приложением, поскольку компилятор не может перекомпилировать DCU.

0 голосов
/ 18 декабря 2016

Уже довольно поздно, но вот то, с чем я пришел.

Моя структура каталогов такая

/ 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 может копироваться снова и снова для каждого проекта. Не знаю, может ли это вызвать какие-либо проблемы сейчас.

...