视觉形式继承问题."不能从(父窗体)继承.包含不支持继承的组件"

3 delphi delphi-7

我有一个与后代的基本形式.基础表单上有一个TElRelDataSource(来自ElPack v4.00).当我打开后代表单时,我收到一个错误"无法继承(父表单).包含一个不支持继承的组件".这是与祖先形式开放(有两个),以避免"祖先形式(父形式)未找到"错误.

Delphi 7不支持(AFAIK)最终类,但这似乎是一个标准的错误消息.这是在"德尔福的Tomes:故障排除"的索引中,但我没有那份副本,我不愿意花费60美元来阅读"这就是为什么你应该避免使用VFI"这样的条目(对此感到悲观)书的内容).除此之外,Google或Bing中没有引用.

这是我最近从不久前离开的人那里继承的代码,我是他们离开后第一个改变它的人.这意味着我无法问他是如何制作违规表格的.

那么,我该如何解决此错误消息?

Cos*_*und 5

你陷入了一个有趣的问题.首先,您说父表单已包含违规的DataSource,因此您必须问自己一个问题:原始开发人员如何设置将数据集放在父表单上,然后创建子表单,如果创建子表单被数据源拒绝了吗?

原始代码没有TElRelDataSource

这意味着你正试图将它添加到你自己身上.不要添加它,找到一个不依赖于TElRelDataSource的其他解决方案.

原始代码确实有它!

原始版本可能是针对不同版本的TElRelDataSource编译的,这个版本允许继承."Inherability"由"csInheritable"组件样式控制.也就是说,如果组件在ComponentStyle中不包含"csInheritable",则Delphi IDE将不允许可视继承.你有很多选择:

  • 使用不同版本的TElRelDataSource,也许原始版本是针对TEERRelDataSource的NEWER版本编译的.如果您使用的是最新的TElRelDataSource,作者可能认为它的代码无法处理视觉继承,因此他/她从ComponentStyle中删除了csInheritable标志!
  • 尝试制作自己的派生组件并自己设置该样式.这很容易做到,但如果TElRelDataSource的作者出于某种原因删除了csInheritable标志,你可能会遇到麻烦.
  • 通常,HeartWare的想法会很好用; 不幸的是,使用DATA SOURCE组件并不容易:我假设您有链接到该数据源的DB-Aware控件.如果您从代码创建DataSource,您还需要重新创建与数据感知控件的连接,这将需要大量的"if-s"(或巧妙地使用RTTI).
  • 您可以尝试将DataSource移动到TDataModule.这可能比较麻烦,值得.