我有自己的表单层次结构:TFORM->TKCustomForm->TKObjectForm->TFSObjectForm.
TForm – 标准 Delphi 类。TKCustomForm – 实现我的应用程序表单的基本逻辑(调试、日志记录、调整大小等)。没有 DFM 变化。DFM 代码:
object KCustomForm: TKCustomForm
Caption = 'KCustomForm'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
...
end
TKObjectForm - 实现应用程序对话框形式的基本逻辑。添加自定义发布的属性和事件。还添加视觉组件(底部面板按钮确定,取消,应用)。DFM 代码如下所示:
inherited KObjectForm: TKObjectForm
Caption = 'KObjectForm'
...
object pnlBottom: TKMovePanel
...
object pnlButtons: TKMovePanel
object btnOK: TKButton
..
end
object btnCancel: TKButton
..
end
object btnApply: TKButton
..
end
end
end
object DataSource: TDataSource
Left = 184
Top = 152
end
end
TFSObjectForm – 实现对 FastScript 引擎的支持。没有 dfm 变化。DFM 看起来像这样:
inherited FSObjectForm: TFSObjectForm
PixelsPerInch = 96
TextHeight = 13
end
所有这些文件都在包中。一切都按预期工作,除了我看不到其他属性和事件。我必须每次在源中手动设置它。
我发现这个问题可以通过使用RegisterCustomModule
方法来解决。如果它用于显示一种表单类型或框架类型的已发布属性,它可以正常工作,但对于整个层次结构,它的工作方式非常奇怪。
在Register
包的方法中,我添加了所有类型的注册RegisterNoIcon([TKCustomForm, TKObjectForm, TFSObjectForm, TKIndepForm, TFSIndepForm]);
当我使用RegisterCustomModule(TKCustomForm, TCustomModule);
- 将 KObjectForm 中的 DFM 代码从inherited KObjectForm
to更改为时object KObjectForm
,没有任何反应。
当我使用RegisterCustomModule(TKObjectForm, TCustomModule);
- 将 FSObjectForm 中的 DFM 代码从 更改inherited FSObjectForm
为 时object FSObjectForm
,在设计器中显示了其他属性,但从表单中删除了其他面板。
当我使用RegisterCustomModule(TFSObjectForm, TCustomModule);
- 没有任何反应。整个层次结构中的 DFM 代码相同,出现带有按钮的底部面板,但 TFSObjectForm 和所有访问器中仍然缺少其他属性。我什至尝试从TKObjectForm
in重新发布属性,TFSObjectForm
但它不起作用。
如何在 dfm 中添加组件并使已发布的属性在同一父类中可见?