gpt4 book ai didi

delphi - 注册自定义框架

转载 作者:行者123 更新时间:2023-12-03 15:22:49 25 4
gpt4 key购买 nike

在 Delphi 2009 中,在我的一个项目中,我有一个自定义框架,上面有一些控件,我想将其用作其他一些控件的基类。我想将此框架注册为 IDE 向导,以便在新项目列表中可用。当我将新添加的项目(我的自定义框架)添加到项目中时,我希望它:

  1. 显示我在对象检查器中添加到自定义框架的所有属性和事件。
  2. 从我的自定义框架而不是 TFrame 派生新创建的框架。

好的,为了让它在对象检查器中显示我的属性和事件,我在 IDE 中注册了一个自定义模块。它不适用于框架。幸运的是,StackOverflow 上有人提到了这一点,并给出了答案:

Showing TFrame descendant's additional properties on the object inspector

然后,为了使其加载自定义框架的 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;

框架已正确添加到设计器,并且其他属性在对象检查器中可见,但运行应用程序失败,因为它提示框架上的组件已存在。

所以,我的问题是:拥有一个 Delphi IDE 向导的解决方案是什么,该向导使用 DFM 从自定义框架(而不是表单)创建派生框架,并在对象检查器中显示其附加属性?

顺便说一句,我不想​​在运行时在框架中构建控件,因为我也需要它们在设计时可用。

我希望有人能向我澄清这件事。

问候

编辑:

这些框架实际上用作向导组件的页面。我的向导组件在运行时创建它们。我希望用户在“New Item”菜单中有一个选项,可以将向导页面添加到项目中,并在 IDE 设计器中设计其布局,并将其注册到我的向导组件中以在向导中显示。我从 TFrame 继承了一个基类,因为我的向导页面应该有一些强制控件以及一些自定义属性和事件。

最佳答案

我已经相当广泛地探索了使用 TFrames(及其相关继承)作为组件开发的基础,并且可以详细说明我发现的内容是否有用,但我从未需要使用 RegisterCustomModule - 我只需使用正常的框架继承直接从 TFrame 进行开发,然后在标准组件注册单元中注册生成的“最终”版本。这似乎可以实现两全其美(可视化开发+继承,加上组件选项板+对象检查器功能)。

不过,有很多小技巧和需要注意的问题,例如如何命名 TFrame 本身,确保 DFM 文件在第一行正确使用“对象”或“继承”,以及,一般来说,我发现创建一个继承自 TFrame 的“基本框架”,但不添加任何内容,对于复杂继承树的稳定性非常有益......然后从那里继承所有其他框架。 (在添加已发布的属性等时,这似乎尤其正确)。

告诉我更多关于为什么您特别想要使用 IDE 向导的信息,也许如果这不是一成不变的方法,我可以提供更多帮助。

关于delphi - 注册自定义框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/876081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com