我一直在从事 Delphi 7 中的一个项目,我想让表单从其他表单继承组件。我能够得到这个工作,但遇到了以下问题(我将发布解决方案,希望将来能帮助其他人):
- 在表单的 .pas 文件中,我会将表单更改为从其他表单继承,但它不会从祖先表单中获取组件。
- 对于某些后代表单,我在设计时打开表单时会收到以下错误消息:“创建表单时出错:找不到'TAncestorForm'的祖先。” 我必须先手动打开祖先表单,然后才能打开后代表单。
我一直在从事 Delphi 7 中的一个项目,我想让表单从其他表单继承组件。我能够得到这个工作,但遇到了以下问题(我将发布解决方案,希望将来能帮助其他人):
首先,对于那些不知道如何直观地继承表单的人,您可以像往常一样创建祖先表单。然后转到文件>新建>其他。选择带有当前项目名称的选项卡,然后选择要继承的表单。如果要从不属于当前项目的表单继承,请打开该表单,右键单击它,然后选择 Add to Repository。然后您将能够转到文件 > 新建 > 其他并从相应的选项卡中选择该表单。
鉴于此,我遇到了一些问题,因为已经创建了一些后代表单,所以我无法遵循上述过程。此外,我对 Delphi 创建的标准代码中的表单进行了一些更改。我能够使用以下准则解决视觉表单继承的所有问题:
type TMyForm = class(TAncestorForm)
inherited
而不是object
,例如:inherited MyForm: TMyForm
var AncestorForm: TAncestorForm;
uses
部分必须具有与单元文件名后的注释相同的全局变量,例如:unAncestor in 'unAncestor.pas' {AncestorForm}
注释/提示:
DPR 似乎比这更棘手。在我的例子中,我创建了一个从 TFrame 派生的祖先。然后我从 TAncestorFrame 派生了多个帧。我的 DPR 的 uses 子句看起来像:
uses
Forms,
ancestorFrame in 'ancestorFrame.pas' {AncestorFrame : TFrame},
frame1Unit in 'frame1Unit.pas' {frame1:TFrame},
frame2Unit in 'frame2Unit .pas' {frame2:TFrame},
DPROJ 文件应如下所示:
<DCCReference include="frame1Unit.pas">
<Form>frame1</Form>
<DesignClass>TFrame</DesignClass>
</DCCReference>
派生帧应如下所示:
TFrame1 = class(TAncestorFrame)
派生帧 .DFM 文件应该说:
inherited Frame1:TFrame1