我的组件声明是:
MyComponentX = class(TActiveXComponent, IspdInterfaceX)
TActivexComponent:
TActiveXComponent = class(TActiveXControl, IOleControl)
当我在任何Delphi版本中打开一个新的DataModule时,该组件将从Component Palette中消失。
我尝试在Delphi XE2中更改ClassGroup,但这不起作用。
答案 0 :(得分:2)
数据模块只能托管非可视控件,TActiveXControl
不是非可视控件。
你问非视觉控制的定义是什么。根据{{3}},定义是如果组件派生自TComponent
而非派生自TControl
,则它是非可视控件。
也就是说,TActiveXControl
的继承层次结构是:TObject
,TComObject
,TTypedComObject
,TAutoObject
,TActiveXControl
。因此,我不知道它出现在组件面板上,因为它不是从TComponent
派生出来的。了解你的注册方式会很有趣。尽管如此,它并不是行为意义上的非视觉成分。
答案 1 :(得分:0)
在这种情况下,您可以创建一个类包装器以在此数据模块中使用ActiveX。
TWrapper = class(TComponent)
private
FYourActiveX: TYourActiveX;
public
procedure Method;
end;
procedure TWrapper.Method;
begin
FYourActiveX.Method;
end;