Delphi 中运行时和设计时程序包的探讨

vs3odd8k  于 2023-03-12  发布在  其他
关注(0)|答案(4)|浏览(193)

我看到 Delphi 中的大多数组件(VCL)都被分成了两部分。
1)设计时程序包
2)运行时程序包
为什么要这么大惊小怪呢?如果RunTime和DesignTime包合并成一个包,会有什么区别呢?
我从来没有真正能够理解这种分离的逻辑。
那么这背后的逻辑是什么呢?
有一次我听到有人说,这种区分只是为了避免采用和遵循微软制定的组件标准,这背后真的没有逻辑。
这是真的吗?

rhfm7lfc

rhfm7lfc1#

答:某些组件具有大型而复杂的设计时功能(如属性编辑器),您可能不希望在运行时应用程序中包含这些功能。
一些组件供应商不希望将他们庞大而复杂的设计时功能授权给免版税的运行时使用,而是将其限制为仅由开发人员使用。

yks3o0rb

yks3o0rb2#

1.设计时的东西可能会使用 Delphi 的内部单元/包,你既没有源代码,也不允许以二进制形式发布。
1.您可能不想让应用程序要求在用户计算机上安装 Delphi 。
逻辑是将您自己的代码与“粘合”代码分开,这使得它在IDE中很好&很容易使用。

7cjasjjr

7cjasjjr3#

如果你做了一点研究,你会发现this SO question问不到2天前...
正如已经解释过的,主要原因是你不能在运行时包中包含任何 Delphi Design单元,也没有理由用只能在IDE中运行的代码来膨胀你的可执行文件。

thigvfpy

thigvfpy4#

简短的回答是......如果你想正确地做,它会很复杂,而且会有一个缺点。
不那么简短的答案是......使用懒人的解决方案:运行时/设计时混合。也有可能(但不太可能)的缺点。
完整答案是:

无论我们安装什么库,它都有两种“风格”:运行时库和设计时库(实际上,有三个...请继续阅读)。

运行时库

有些库只提供运行时例程,而不提供可视化组件(VCL)。
1.我们只是编译这个库,没有什么需要“安装”的(对于这样的库,弹出菜单中没有“安装”条目)。
1.将库文件包含到您的项目中(将其拖放到项目管理器中)或将库路径添加到“搜索路径”/“库路径”中,如上所示。现在,我们可以简单地从程序中调用该库的函数。
如果库有两个包(两个DPK文件),一个标记为设计时,另一个标记为运行时,则始终在编译设计时库之前编译运行时库。注意,有时名称末尾只有“D”(设计时)和“R”(运行时)。如果我们从设计时库开始,它可能会抱怨找不到运行时库。

设计时库

提供可视化组件的库是设计时库 *。我们需要在 Delphi 中加载这些库(到项目管理器中)并安装它们。

安装后,该库的可视组件将出现在“调色板”中,这样我们就可以在设计时将它们拖放到窗体上。库的文档将告诉我们在哪个类别下可以找到新安装的组件。如果没有文档,请在该库的单元中搜索名为“Register”的过程。这将以两个字符串作为参数:组件的名称以及它将在“调色板”中出现的类别:

  • TRichLog组件将出现在组件面板中的“Cubic”类别下。*

如果我们不再需要这个库,我们可以在“项目管理器”中右键单击它,然后选择“卸载”。

设计时和运行时库

有些人可能不同意我以上的说法,请参阅以下页面了解详细信息:RobsTechcorner.blogspot.com/2011/06/runtimedesigntime-what-delphi-packages.html
这是因为,从理论上讲,设计时包应该只包含属性编辑器等特殊对象的代码(你可以在对象检查器中看到属性编辑器)。而且运行时包应该只包含开发过程中不需要的代码。运行时包永远不应该包含或需要设计时代码。这是理论。编程和保持代码分离的好方法。然而,这是有代价的:a)很难将两者分开B)我们将不得不交付运行时包和exe文件。因此,我们不能再交付单一的应用程序了!不好!
解决方案是将包声明为混合的“设计时和运行时库”。
顺便说一句,当使用向导创建一个新的包时, Delphi 会默认声明该包为“设计时和运行时”。但是,这仍然被认为是懒人的解决方案。老实说,我只使用这种解决方案。即使我创建了很多可视化组件,但没有一个有设计时编辑器。

相关问题