界面和实现部分有{$R *.DFM}指令的区别是什么?

5

{$R *.DFM}指令在接口和实现部分之间的区别是什么?

如果我在接口部分有{$R *.DFM}指令会怎样?

interface
{$R *.DFM}

如果我的实现中有 {$R *.DFM},那该怎么办?

implementation
{$R *.DFM}

2
据我所知,在这两种情况下,编译器都会将资源链接到可执行文件中(仅此而已)。 - kobik
正如@kobik所说,没有区别。在我看来,你可以通过剪切和粘贴一行代码({$R *.dfm})并构建你的应用程序来自己回答这个问题。 - Ken White
2
@Ken:并不是这样。他可能已经看到了对他来说显而易见的没有差异。 - Uli Gerhardt
@Uli:不,无论该语句放置在何处,表单仍然可用并正常运行,他本可以看到这一点。由于{$R *.DFM}仅用于包含IDE生成的窗体文件,因此不可能存在任何差异。我确实同意Rob的观点,即它属于IDE,应该被保留不变。 - Ken White
@Ken,仅仅因为程序继续正常运行并不排除其他不可感知的差异。例如,也许语句在实现部分意味着只有当前单元的代码可以访问该资源。这是所有普通程序所做的,所以对于放置在其他位置的情况,普通观察者永远不会注意到差异。你和我知道资源不是这样工作的,但对于不知道答案的人来说,这并不明显。 - Rob Kennedy
@Rob:这是一个表单文件(.DFM),因此其内容非常清晰。如果表单被创建并正确显示,并且事件处理程序被正确附加,它就可以工作。我没有对问题进行投票;我只是指出,在发布问题之前,许多时候您可以自己做一些事情来找到答案。在这种情况下,那个单一的实验将提供答案,即从功能上讲,位置没有区别,尽管您关于该行属于IDE的评论是正确的。 - Ken White
1个回答

3
这不应该有任何影响。该指令确保与该单元表单相关的 DFM 资源链接到您的可执行文件。所有单元都可以访问程序中的所有资源,因此链接指令的位置对资源的可见性没有影响。
该指令由 IDE 放置。如果您移动了 IDE 负责的部分代码,IDE 可能会出现异常情况,因此即使编译器在任何地方都接受 $R 命令,我也不建议移动它。将其保留在找到它的任何位置。

你认为IDE通常会将Form单元放在哪里?我观察到它通常会放在implementation部分的uses声明之后。有时会放在var之后,甚至是普通函数之后,但这显然是手动引起的。是否有一个“规范位置”来放置它? - Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接