Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未找到Delphi DFM_Delphi_Dfm - Fatal编程技术网

未找到Delphi DFM

未找到Delphi DFM,delphi,dfm,Delphi,Dfm,我的项目中有一个xyz.pas文件引用。但那个文件不是我的。我有xyz.pas文件的xyz.dcu和xyz.obj文件。 当我试图编译该项目时,出现错误“xyz.dcu未找到”。因此,我在搜索路径中包含了xyz.dcu的路径。现在我得到错误“xyz.dfm未找到” 请给我建议解决办法。是否可以只使用.dcu和.obj文件编译项目 提前谢谢。 当做 NarenDFM文件包含(比如)表单的“视觉”方面(控件、组件、属性、视觉、数据…)。如果PAS文件(或编译的DCU文件)需要DFM,则必须拥有它,否

我的项目中有一个xyz.pas文件引用。但那个文件不是我的。我有xyz.pas文件的xyz.dcu和xyz.obj文件。 当我试图编译该项目时,出现错误“xyz.dcu未找到”。因此,我在搜索路径中包含了xyz.dcu的路径。现在我得到错误“xyz.dfm未找到”

请给我建议解决办法。是否可以只使用.dcu和.obj文件编译项目

提前谢谢。 当做 Naren

DFM文件包含(比如)表单的“视觉”方面(控件、组件、属性、视觉、数据…)。如果PAS文件(或编译的DCU文件)需要DFM,则必须拥有它,否则会出现此错误。我认为,除了拥有DFM之外,没有别的办法了


更正(如下所述,抱歉!):如果删除PAS文件并仅提供DCU文件,则可以仅使用DCU文件进行编译。在这种情况下,DCU文件必须使用要链接到应用程序的相同编译器版本进行编译,因为编译器无法重新编译DCU

我希望你没有丢掉工作

简化后,Delphi的工作原理如下:
PAS+DFM=>DCU
DCU+RES=>EXE
关于Delphi文件的更多信息,请参见本答案末尾

如果只有DCU文件,则可以编译项目。首先,从文件夹中删除PAS文件,否则Delphi将尝试重新编译它(为了重新编译它,它需要DFM文件)。
我认为Obj文件对你没有任何用处


DFM文件对您的项目非常重要,但并不重要。如果您非常需要它,您仍然可以不使用它,因为可以根据PAS文件中的信息和应用程序GUI的外观(如果您曾经看到它运行)手动重建它

以下是技巧(包括一些工作):

只需创建一个新表单,然后查看原始PAS文件顶部的表单声明。可能是这样的:

TYPE
  TYourForm = class(TForm)
     xLabel: TLabel;
     yButton: TButton;
     etc
     etc
  end;
然后将所有这些控件放回新窗体,并按照PAS文件中的名称(xLabel、yButton等)对它们进行命名。将它们安排为与原始GUI相似。完成后,用原始PAS文件替换新创建的PAS文件。重要提示:DFM和PAS文件的名称应匹配。编译就完成了!重新构建的GUI可能与原来的GUI不完全相同,但它应该做到这一点

提示:
有一些工具可以从DCU/EXE提取DFM文件。
下面是其中的一些:www.delphi2.software.informer.com/download delphi extract dfm
这将对你有很大帮助


.PAS-Delphi源文件
PAS应存储在源代码管理中
在Delphi中,PAS文件始终是单元或窗体的源代码。单元源文件包含应用程序中的大部分代码。该单元包含附加到窗体事件或其包含的组件的任何事件处理程序的源代码。我们可以使用Delphi的代码编辑器编辑.pas文件。不要删除.pas文件

.DCU-Delphi编译单元
已编译的单位(.pas)文件。默认情况下,每个单元的编译版本存储在单独的二进制格式文件中,该文件与单元文件同名,但扩展名为.DCU(Delphi编译单元)。例如,unit1.dcu包含unit1.pas文件中声明的代码和数据。重建项目时,除非自上次编译以来其源(.PAS)文件已更改,或者找不到其.DCU文件,否则不会重新编译各个单元。安全地删除.dcu文件,因为Delphi在编译应用程序时会重新创建它

.DFM-德尔福表格
DFM应存储在源代码管理中
这些文件始终与.pas文件配对。Dfm文件包含表单中包含的对象的详细信息(属性)。通过右键单击表单并从弹出菜单中选择“查看为文本”,可以将其视为文本。Delphi将.dfm文件中的信息复制到完成的.exe代码文件中。更改此文件时应小心,因为对它的更改可能会阻止IDE加载表单。表单文件可以以二进制或文本格式保存。“环境选项”对话框可用于指示新创建的表单要使用的格式。不要删除.dfm文件


来源:delphi.about.com/od/初学者/a/aa032800a.htm

如果您仍然拥有可执行文件,那么您可以通过任意资源管理器从应用程序资源中提取完整的原始DFM文件。例如:。在RC数据类别中,将有一个名为TXYZ的项。

Delphi 20xx/XE
请注意,Delphi将文件的旧版本保存在名为
\uu history
的项目目录的隐藏子目录中

该目录中保存了.pas、.dfm和其他项目文件的版本。
每次将更改保存到磁盘时,都会创建这些文件

在硬盘上搜索所有名为
*.~*~
的文件(包括隐藏文件)。
他们会错过你最后一次做的改变,但至少你不必重新做每件事

Delphi 7及之前的版本

Delphi 7使用扩展名
~
将这些文件保存在与项目文件相同的目录中。

这已经很晚了,但下面是我附带的内容

我的目录结构是这样的

/ Project
  / Source
    / Unit1.pas
  / Packages
    /Delphi2010Berlin
      / MyPackage1.dpk
      / MyPackage2.dpk
  / Library
    / Delphi2010Berlin
      / Win32
        / Debug
        / Release
在/Project文件夹中,我创建了一个名为“dfmcopy.bat”的.bat文件

它所包含的只是

@echo off
for /r %1 %%x in (*.dfm) do @copy "%%x" %2 /Y >NUL
然后,在我的.bpl生成后事件中

./../../dfmcopy.bat $(PROJECTPATH)\..\..\Source $(PROJECTPATH)\..\..\Library\$(Platform)\$(Config)
这将递归地将/Source文件夹中包含的所有.dfm复制到/Library/{DelphiVersion}/{Platform}/{Config}文件夹中

一个警告是,如果您有多个具有此生成后事件的项目,则可能会为每个项目重复复制dfms。现在不知道这是否会带来任何问题。

您好,非常感谢