加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 注册自定义框架

发布时间:2020-12-15 10:12:52 所属栏目:大数据 来源:网络整理
导读:在Delphi 2009中,在我的一个项目中,我有一个自定义框架,上面有一些控件,我想用它作为其他控件的基类.我想将此框架注册为IDE向导,以便在“新建项目”列表中可用.当我将新添加的项目(我的自定义框架)添加到项目时,我希望它: 显示我在对象检查器中添加到自定义
在Delphi 2009中,在我的一个项目中,我有一个自定义框架,上面有一些控件,我想用它作为其他控件的基类.我想将此框架注册为IDE向导,以便在“新建项目”列表中可用.当我将新添加的项目(我的自定义框架)添加到项目时,我希望它:

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

好的,为了让它在Object Inspector中显示我的属性和事件,我将自定义模块注册到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,它也能正确显示我的框架,但Object Inspector中没有显示其他属性!

如果我将构造函数源更改为此(用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中显示其附加属性?

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

我希望有人能把这件事告诉我.

问候

编辑:

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

解决方法

我已经相当广泛地探索了使用TFrames(以及它们的相关继承)作为组件开发的基础,并且可以详细说明我发现它是否有用,但我从来没有需要使用RegisterCustomModule – 我只是从使用常规帧继承直接进行TFrame,然后在标准组件注册单元中注册生成的“最终”版本.这似乎允许两全其美(可视化开发继承,以及组件调色板对象检查器功能).

虽然它有很多小技巧,但需要注意的是,如何命名TFrame本身,确保DFM文件在第一行正确使用“对象”或“继承”,一般来说,已经发现它非常有利于复杂继承树的稳定性来创建一个继承自TFrame的“基础框架”,但是将NOTHING添加到它…然后从那里继承所有其他的. (在添加已发布的属性等时,这似乎尤其如此).

告诉我更多关于为什么特别想要使用IDE向导的问题,也许如果这不是一种方法,我可以提供更多帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读