将 Delphi 7 属性编辑器转换为 Delphi XE2

3
首先,我从未从头编写过属性编辑器,但在另一个问题中得到了一些帮助。请参考那里的被接受的答案。当时使用的是Delphi 7,现在我开始使用XE2,并且必须确保我的属性编辑器与7和XE2两个版本兼容。
它本质上是一个集合编辑器,不同之处在于每个集合项在父表单中都有自己的命名组件。自从7以来,XE2的属性编辑器有什么新变化吗?毕竟这是一个巨大的版本跳跃。
不希望为不同的版本制作完整的单元副本。我希望在一个单元中维护所有可能的版本。 编辑 看起来Delphi XE2和Delphi 7具有相同的属性编辑器,但我面临的问题是,尽管我在我的包中包含了DesignIDE,但它找不到任何内容,所以我不得不将ToolsAPI文件夹添加到我的库路径中。
然而,现在我遇到了一个新问题。 [DCC Fatal Error] ToolsAPI.pas(18): F1026 File not found: 'DockForm.dcu' 我对BPL包的整个概念和对其他包的要求感到迷失。

你在迁移现有代码时遇到了什么问题? - Remy Lebeau
没有找到任何设计编辑器单元,在每个 Delphi 版本中它们都不同(据我所知),而且除了我在 D7 中为我的项目制作的一个之外,我对制作设计编辑器一无所知。 - Jerry Dodge
3
XE2中使用的设计时单元(DesignIntf, DesignEditors, DesignMenus, DesignWindows等)是在D6中引入的,因此它们在D7中也被使用。 在XE2中制作设计时属性/组件编辑器与D7相同,需要创建一个仅限设计时的包,在其Requires列表中添加DesignIDE包和你的组件运行时包,根据需要编写编辑器类,然后通过你的设计时包的导出Register()函数注册它们,例如使用RegisterPropertyEditor()RegisterComponentEditor()等。如果仍有问题,请展示你的代码。 - Remy Lebeau
2
如果您的 Delphi 7 属性编辑器编写得正确,那么它在 XE2 中仍应该可以完美编译。VCL 单元的最后一次重组是在 Delphi 6 中进行的。自那以后,单元和包名称就没有改变过。(请注意,我说的是 VCL,因为显然 FMX 的东西当时还不存在。) - Ken White
我能否得到一个关闭投票的解释?我相信每个升级到XE2的人都想知道他们是否会在升级时遇到问题,而我不确定会发生什么。 - Jerry Dodge
Jerry,这是一个非常好的问题。不确定为什么会有关闭投票。 - Warren P
2个回答

4

DesignIntf,DesignEditors,DesignMenus和DesignWindows是DesignIDE.bpl的一部分,并位于\Embarcadero\RAD_Studio\9.0\lib\win32\release\designide.dcp中。但是没有64位版本的designide.dcp,因此在编译引用这些单元的64位包时会出现错误。

DesignIDE没有64位版本,因为它是一个设计时包,设计时包仅支持32位(请记住Delphi IDE仍为32位)。因此,请始终将您的设计时包设置为32位,而不是64位。:)

Mike


就是这样!删除了所有64位引用,它就可以工作了:D 我想我应该指出我选择了64位选项。 - Jerry Dodge

3

DockForm.pas源代码在Delphi XE和Delphi XE2中均不可用。

您可以尝试使用适用于Delphi 2010类似问题的已接受答案发布在SO上。

据推测,它已经编译并包含在Delphi XE2已经分发的某个软件包中。


+1. 将DesignIde.dcp添加到您的设计时包的requires部分,这就是您需要做的全部。 - Warren P

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