向包中添加表单和框架

时间:2009-02-25 21:35:26

标签: delphi ide packages custom-component

我正在开发一个IDE注册组件包,其中大部分都是从基础TFrame类派生的。还有各种自定义对话框表单,这些表单由这些组件调用,包含在包中。我在Delphi 2007工作。

我注意到有时框架和表单单元(通常具有关联的DFM文件)并不总是在其下方显示“下面”(可通过​​小[+]树视图节点扩展器访问)的DFM文件。例如,如果我添加一个现有的基于表单的PAS文件,通过右键单击BPL项目(在项目管理器中) - >添加,它不会在列表中显示DFM文件。

如果我添加新项目,并在项目中创建新的表单或框架单元,它将显示为项目管理器中的典型嵌套双文件项目。如果我将现有表单从项目组中的另一个项目拖到相关的BPL项目中,它也会显示这种方式。

似乎这应该是一致的,我更喜欢两个文件显示单位是框架还是表格。

这是否表示项目文件中存在错误?我是否错误地将现有表格/框架添加到此包裹中?如果是这样,我应该如何添加现有的表单/框架单元,以便两个文件显示在项目管理器列表中?

*更新*

来自Alen的建议如下:

我尝试将{$ R * .dfm}指令添加到表单的单元中,并且在将其添加到我的BPL包/项目时它没有强制显示DFM文件。将{$ R * .dfm}添加到项目文件本身(我认为这不是你的意思,但我想我会尝试它)也不起作用。这种技术只适用于EXE项目吗?

可能(可能)相关,尝试在某些地方使用该指令构建给我这个:

[DCC错误] E2161警告:资源重复:类型10(RCDATA),ID TTESTTREEVIEW;文件E:\ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm资源保存;文件 E:\ Projects \ MyApp \ Components \ TTestTreeViewFrame.dfm资源被丢弃。

“Keping”和“丢弃”同一个文件??


后来:看起来这个“重复资源”问题可能与此有关 this。不确定,但至少在一个例子中两者同时发生。

3 个答案:

答案 0 :(得分:6)

Vegar走在正确的轨道上。为了让项目经理显示.dfm节点,需要知道表单/框架/数据模块与pas文件相关联。它会查看.dpk或.dpr文件中的{Form1}注释以获取此信息。如果在向项目添加文件时,IDE无法识别出与之关联的.dfm,请确保.pas文件具有明确的{$ R * .dfm}指令。通过这种方式,我不应该被埋在IFDEF中,或者被文件中潜在的语法错误所掩盖。 IDE使用此指令的存在来决定是否应该尝试在设计器中打开.dfm。

如果有一个Unit1.pas和一个Unit1.dfm,IDE不会理所当然地认为他们真的应该在一起。考虑您创建了一个新的表单单元,它被称为Unit1。现在你只删除了Unit1.pas,然后就去创建了一个名为Unit1.pas的新单元。这个新的,同名的Unit1.pas没有引用磁盘上旧的陈旧的Unit1.dfm。如果IDE只是盲目地打开.dfm那将是奇怪和混乱。

答案 1 :(得分:2)

如果您查看软件包的项目源代码,您会发现Contains部分有所不同:

contains
  Unit2 in 'unit2.pas',
  Unit1 in 'Unit1.pas' {Form1};

Unit2将显示为单个单元,unit1将显示为带有表单的单元。 如您所见,unit1有一个单元2缺少的{Form1}注释。

我不知道是否可以添加现有单位,以便自动生成此评论。

答案 2 :(得分:0)

寻找其他解决方案的其他人的另一个原因是当您重命名pas文件时关闭所有文件并重新打开。之前的版本将重新打开&必须删除以前命名添加到项目