在 Delphi 2009 中,在我的一个项目中,我有一个自定义框架,上面有一些控件,我想将其用作其他一些控件的基类。我想将此框架注册为 IDE 向导,以便在新项目列表中可用。当我将新添加的项目(我的自定义框架)添加到项目时,我希望它:
- 在对象检查器中显示我添加到自定义框架的所有属性和事件。
- 从我的自定义框架而不是 TFrame 派生新创建的框架。
好的,为了让它在 Object Inspector 中显示我的属性和事件,我在 IDE 中注册了一个自定义模块。它不适用于框架。幸运的是,有人在 StackOverflow 上提到了这一点,并给出了答案:
然后,为了让它加载我的自定义框架的 DFM,我将 InitInheritedComponent 添加到我的自定义框架的构造函数中。像这样的东西:
constructor TMyFrame.Create(AOwner: TComponent); override;
begin
inerited;
if (ClassType <> TMyFrame) and not (csDesignInstance in ComponentState) then
begin
if not InitInheritedComponent(Self, TMyFrame) then
raise EResNotFound.CreateFmt('Resource %s not found', [ClassName]);
end;
end;
它不起作用!它仍然在设计器中创建一个空框架,而不是我自己的框架。如果我没有将自定义模块注册到 IDE 中,即使不需要 InitInheritedComponent,它也会正确显示我的框架,但对象检查器中不会显示其他属性!
如果我将构造函数源更改为此(用 TFrame 替换 TMyFrame):
constructor TMyFrame.Create(AOwner: TComponent); override;
begin
inerited;
if (ClassType <> TFrame) and not (csDesignInstance in ComponentState) then
begin
if not InitInheritedComponent(Self, TFrame) then
raise EResNotFound.CreateFmt('Resource %s not found', [ClassName]);
end;
end;
框架已正确添加到设计器中,并且在 Object Inspector 中可以看到其他属性,但运行应用程序失败,因为它抱怨框架上的组件已经存在。
所以,我的问题是:让 Delphi IDE 向导使用 DFM 从自定义框架(不是表单)创建派生框架并在 Object Inspector 中显示其附加属性的解决方案是什么?
顺便说一句,我不想在运行时在框架中构建控件,因为我也需要它们在设计时可用。
我希望有人能把这件事告诉我。
问候
编辑:
这些框架实际上用作向导组件的页面。我的向导组件在运行时创建它们。我希望用户在“新建项目”菜单中有一个选项,可以将向导页面添加到项目中,并在 IDE 设计器中设计其布局,并将其注册到我的向导组件中以显示在向导中。我从 TFrame 继承了一个基类,因为我的向导页面应该有一些强制控件和一些自定义属性和事件。