Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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文件与其PAS文件同步_Delphi - Fatal编程技术网

保持Delphi DFM文件与其PAS文件同步

保持Delphi DFM文件与其PAS文件同步,delphi,Delphi,我有一个Delphi项目,有很多DFM文件和匹配的PAS文件。我可以通过重建项目来编译PAS,但如何重建DFM文件并使其与PAS文件保持同步? 现在我从IDE中得到很多“[Variable.field]没有相应的组件。删除声明?”提示。简单的答案是:使用Delphi IDE编辑表单相关的.PAS文件,其任务是保持它们的同步。解决方案很简单 如果某个.pas文件具有关联的.dfm,请不要在IDE外部编辑该文件 不要在IDE外部编辑.dfm 不要编辑IDE所拥有的.pas文件的部分,该部分位于打开表

我有一个Delphi项目,有很多DFM文件和匹配的PAS文件。我可以通过重建项目来编译PAS,但如何重建DFM文件并使其与PAS文件保持同步?

现在我从IDE中得到很多“[Variable.field]没有相应的组件。删除声明?”提示。

简单的答案是:使用Delphi IDE编辑表单相关的.PAS文件,其任务是保持它们的同步。

解决方案很简单

  • 如果某个
    .pas
    文件具有关联的
    .dfm
    ,请不要在IDE外部编辑该文件

  • 不要在IDE外部编辑
    .dfm

  • 不要编辑IDE所拥有的
    .pas
    文件的部分,该部分位于打开表单类定义和第一个
    私有
    部分之间

    type
      TForm1 = class(TForm)
        // Form designer property - keep out
        // It is where the IDE adds components you drag/drop, event handlers 
        // generated via the Object Inspector or automatically by the IDE.
        // It is the published section, and is used by the VCL streaming
        // system to create controls that are on the form and attach event
        // handlers at runtime. Leave it alone. If you need something in
        // a published state, add a new published section below the private
        // section.
      private
        // Yours - edit all you want
      public
        // Yours - edit all you want
      end;
    
  • 如果需要从表单中删除组件,请首先从任何事件处理程序中删除代码(可以使用对象检查器找到它们),只留下空的方法外壳(由过程名称组成,后跟开始、空行和结束),然后在表单上选择组件并单击delete。IDE将从
    .pas
    文件的第一部分和
    .dfm
    中删除声明,并删除空事件处理程序


  • 问题不在于如何保持文件同步,而在于如何使它们不同步。IDE不会这样做。您是如何使文件不同步的?事实上,如果您在IDE之外手动进行更改,可能会发生这种情况。不要这样做。使用IDE进行此类修改,您就不会有问题了。您是否从.pas文件的“表单发布”部分手动删除组件,而不是在表单设计器中删除组件?这些表单和数据模块是在主项目中还是在包中?后者确实带来了问题。在可执行文件中使用包中的表单时,它们仍然需要(单独的)dfm。其他资源也是如此。在我的办公室里,有一个包依赖于这些资源,我必须在其中实现一个构建后事件,以确保在包的输出目录中也更新了资源。您没有注意到,如果从通过对象检查器创建的事件处理程序中删除代码,然后保存,事件处理程序自动消失?如果您向PAS文件中的类(DFM使用的类)添加一个变量,例如,当您将DFM视为文本时,第一行显示的是,例如,我的DFM文件中的第一行是,我的PAS文件中的对象frmAppTools:TfrmAppTools。我已经向TfrmAppTools添加了一些新变量,这些新变量就是我得到的红色错误窗口,该窗口显示“Field frmAppTools.newfield没有相应的组件。是否删除声明?”因此,我似乎需要告诉DFM,TfrmAppTools类中有新变量,它需要以某种方式重新加载它。如果我向TfrmAppTools类添加一个新变量,我将为该新变量获得一个新的红色错误窗口。@TomKelly我不知道新变量的含义。如果要向表单中添加组件,请从IDE中执行。如果要添加新变量,请将它们添加到我上面指出的部分,而不是表单管理发布部分。在我的回答中,我已经非常清楚地说明了允许(或不允许)手动编辑表单代码的位置。IDE处理告诉DFM存在新的组件,如果它没有这样做,那么您就不正确地编辑了它。再次阅读我的答案,特别是代码中的注释。我认为可能发生的情况是,我的Delphi项目在我的多目录链接路径中发现了一个过时的DCU,然后它在我的项目目录中找到了DCU。我的项目中的DCU与我的PAS源代码匹配。谢谢大家的回复。我已经给每个人提供了+反馈。我想可能发生的是,我的Delphi项目在我的多目录链接路径中发现了一个过时的DCU,然后它在我的项目目录中找到了DCU。我的项目中的DCU与我的PAS源代码匹配。谢谢大家的回复。我已经给每个人提供了+反馈。