如何在Delphi中使用或解决可视化表单继承的问题?

Lir*_*dav 12 delphi inheritance

我一直在Delphi 7中开展一个项目,我想让表单从其他表单继承组件.我能够使这个工作,但遇到了以下问题(我将发布解决方案,希望将来帮助其他人):

  1. 在表单的.pas文件中,我会将表单更改为从其他表单继承,但它不会从祖先表单中获取组件.
  2. 对于某些后代表单,我会在设计时打开表单时收到以下错误消息:"创建表单时出错:找不到'TAncestorForm'的祖先." 我必须首先手动打开祖先形式,然后我可以打开后代形式.

Lir*_*dav 27

首先,对于那些不知道如何以可视方式继承表单的人,可以像往常一样创建祖先表单.然后转到文件>新建>其他.选择包含当前项目名称的选项卡,然后选择要从中继承的表单.如果要从不属于当前项目的表单继承,请打开该表单,右键单击它,然后选择"添加到存储库".然后,您将可以转到文件>新建>其他,然后从相应的选项卡中选择该表单.

鉴于此,我遇到了一些问题因为已经创建了一些后代形式,所以我无法按照上面的过程进行操作.此外,我根据Delphi创建的标准代码对表单进行了一些更改.我能够使用以下指南解决视觉形式继承的所有问题:

  • 后代表单的.pas文件必须使表单的类继承自正确的祖先类,例如:
    type TMyForm = class(TAncestorForm)
  • 后代形式的.dfm中的第一行必须包含单词inherited而不是object,例如:
    inherited MyForm: TMyForm
  • 编辑:经过双重检查后,不需要以下内容: 祖先表单的.pas文件必须具有Delphi创建的标准全局变量,例如:
    var AncestorForm: TAncestorForm;
  • uses项目的.dpr文件的部分必须具有与单元文件名后面的注释相同的全局变量,例如:
    unAncestor in 'unAncestor.pas' {AncestorForm}

手册/ Tips:

  • 如果需要,允许非自动创建祖先形式和后代形式(在项目>选项>表单>自动创建表单中设置).
  • 要将后代表单上的属性还原为祖先表单的值,请右键单击"对象检查器"中的属性,然后选择"还原为继承".
  • 要将组件的所有属性值还原为祖先的值,请右键单击该组件,然后选择"还原为继承".

  • 全局变量不是必需的. (2认同)
  • 只有让Delphi"自动创建"表单时才需要全局变量(可以在"项目选项"对话框中设置). (2认同)
  • 另请参阅这两篇解释Frame和DataModule继承的博客文章:http://wiert.wordpress.com/2009/07/22/delphi-frames-as-visual-components-changing-your-inheritance/和http:// wiert.wordpress.com/2009/08/20/delphi-tinterfaceddatamodule-revisted-inherited-in-your-dfm-files-when-your-datamodules-look-like-forms-in-the-designer/那些文章包含图片好的和坏的情况. (2认同)