vcl*_*per 4 delphi delphi-2009 tframe
在 Delphi 2009 中,在我的一个项目中,我有一个自定义框架,上面有一些控件,我想将其用作其他一些控件的基类。我想将此框架注册为 IDE 向导,以便在新项目列表中可用。当我将新添加的项目(我的自定义框架)添加到项目中时,我希望它:
好的,为了让它在对象检查器中显示我的属性和事件,我在 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;
Run Code Online (Sandbox Code Playgroud)
这不起作用!它仍然在设计器中创建一个空框架而不是我自己的框架。如果我没有将自定义模块注册到 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;
Run Code Online (Sandbox Code Playgroud)
框架已正确添加到设计器中,并且其他属性在对象检查器中可见,但运行应用程序失败,因为它抱怨框架上的组件已存在。
所以,我的问题是:拥有一个 Delphi IDE 向导的解决方案是什么,该向导使用 DFM 从自定义框架(而不是表单)创建派生框架,并在对象检查器中显示其附加属性?
顺便说一句,我不想在运行时在框架中构建控件,因为我也需要它们在设计时可用。
我希望有人能向我澄清这件事。
问候
编辑:
这些框架实际上用作向导组件的页面。我的向导组件在运行时创建它们。我希望用户在“New Item”菜单中有一个选项,可以将向导页面添加到项目中,并在 IDE 设计器中设计其布局,并将其注册到我的向导组件中以在向导中显示。我从 TFrame 继承了一个基类,因为我的向导页面应该有一些强制控件以及一些自定义属性和事件。
我已经相当广泛地探索了使用 TFrames(及其相关继承)作为组件开发的基础,并且可以详细说明我发现的内容是否有用,但我从来没有需要使用 RegisterCustomModule ——我只是从使用正常的框架继承直接 TFrames,然后在标准组件注册单元中注册生成的“最终”版本。这似乎可以实现两全其美(视觉开发+继承,加上组件选项板+对象检查器功能)。
不过,有许多小技巧和需要注意的障碍,例如如何命名 TFrame 本身,确保 DFM 文件在第一行正确使用“对象”或“继承”,并且一般来说,我我们发现创建一个继承自 TFrame 的“基本框架”对于复杂继承树的稳定性非常有益,但不添加任何内容......然后从那里继承所有其他框架。(在添加已发布的属性等时,这似乎尤其正确)。
告诉我更多关于为什么您特别想要使用 IDE 向导的信息,也许如果这不是一成不变的方法,我可以提供更多帮助。
| 归档时间: |
|
| 查看次数: |
7697 次 |
| 最近记录: |