2

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

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

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

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

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

* 更新 *

来自艾伦的以下建议:

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

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

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

“保留”和“丢弃”同一个文件??


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

4

3 回答 3

6

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

IDE 并不仅仅理所当然地认为如果有 Unit1.pas 和 Unit1.dfm,它们确实应该在一起。假设您创建了一个新的表单单元,它被称为 Unit1。现在您只删除了 Unit1.pas,然后创建了一个名为 Unit1.pas 的新单元。这个新的、同名的 Unit1.pas 中没有对磁盘上旧的、陈旧的 Unit1.dfm 的引用。如果 IDE 只是盲目地打开该 .dfm,那将会很奇怪和令人困惑。

于 2009-02-25T23:56:28.300 回答
2

如果您查看包的项目源代码,您会发现包含部分的不同之处:

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

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

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

于 2009-02-25T23:06:44.770 回答
0

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

于 2009-07-20T20:38:59.027 回答