1

我有自己的表单层次结构: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 KObjectFormto更改为时object KObjectForm,没有任何反应。

当我使用RegisterCustomModule(TKObjectForm, TCustomModule);- 将 FSObjectForm 中的 DFM 代码从 更改inherited FSObjectForm为 时object FSObjectForm,在设计器中显示了其他属性,但从表单中删除了其他面板。

当我使用RegisterCustomModule(TFSObjectForm, TCustomModule);- 没有任何反应。整个层次结构中的 DFM 代码相同,出现带有按钮的底部面板,但 TFSObjectForm 和所有访问器中仍然缺少其他属性。我什至尝试从TKObjectFormin重新发布属性,TFSObjectForm 但它不起作用。

如何在 dfm 中添加组件并使已发布的属性在同一父类中可见?

4

0 回答 0