0

我的组件的声明是:

MyComponentX = class(TActiveXComponent, IspdInterfaceX)

TActivex组件:

TActiveXComponent = class(TActiveXControl, IOleControl) 

当我在任何 Delphi 版本中打开一个新的 DataModule 时,该组件将从组件面板中消失。

我尝试更改 Delphi XE2 中的 ClassGroup,但这不起作用。

4

2 回答 2

2

数据模块只能承载非可视控件,TActiveXControl而不是非可视控件。

你问非视觉控制的定义是什么。根据这篇文章的定义是,如果组件是派生自TComponent而不是派生自的TControl,那么它就是一个非可视化控件。

也就是说,继承层次结构TActiveXControl是:TObject, TComObject, TTypedComObject, TAutoObject, TActiveXControl. 所以我不知道为什么它会出现在你的组件面板上,因为它不是从TComponent. 知道您如何注册它会很有趣。尽管如此,它并不是行为意义中的非视觉成分。

于 2014-03-05T17:48:58.703 回答
0

在这种情况下,您可以创建一个类包装器以在此数据模块中使用您的 ActiveX。

TWrapper = class(TComponent)
private
    FYourActiveX: TYourActiveX;
public
    procedure Method;
end;

procedure TWrapper.Method;
begin
    FYourActiveX.Method;
end;
于 2014-03-05T18:21:46.183 回答