>显示我在对象检查器中添加到自定义框架的所有属性和事件.
>从我的自定义框架而不是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继承了一个基类,因为我的向导页面应该有一些强制控件和一些自定义属性和事件.
解决方法
虽然它有很多小技巧,但需要注意的是,如何命名TFrame本身,确保DFM文件在第一行正确使用“对象”或“继承”,一般来说,已经发现它非常有利于复杂继承树的稳定性来创建一个继承自TFrame的“基础框架”,但是将nothing添加到它…然后从那里继承所有其他的. (在添加已发布的属性等时,这似乎尤其如此).
告诉我更多关于为什么特别想要使用IDE向导的问题,也许如果这不是一种方法,我可以提供更多帮助.