我是组件创建的新手,正在尝试使用Delphi的标准问题VCL创建一些自己的自定义派生组件.
我想我可以将两个组件混合在一起,创建一个单独的组件.从目前为止,我的想法是将TImage放在TScrollBox中:
unit MyComponent;
interface
uses
Windows,
Classes,
Controls,
Forms,
ExtCtrls;
type
TMyPanel = class(TScrollBox)
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TMyPanel]);
end;
{ TMyPanel }
constructor TMyPanel.Create(AOwner: TComponent);
var
AImage: TImage;
begin
inherited Create(AOwner);
AImage := TImage.Create(AOwner);
AImage.Align := alClient;
AImage.Parent := Self;
end;
destructor TMyPanel.Destroy;
begin
inherited;
end;
end.
Run Code Online (Sandbox Code Playgroud)
如果我将上面的代码编译并安装到一个包中,结果如下所示:


问题
我希望我的组件被注册为一个单独的组件.但该组件应该是TScrollBox和TImage的组合.主要组件将是TScrollBox,但它现在应该可以访问TImage的属性和事件等.
例如,TMyPanel可以共享TImage和TScrollBox的属性:
我认为完全编写一个新的组件来完成上述行为是不合适的,我真的不知道从哪里开始.如果可以实现这一点,您可以创建一些有趣的组件,这些组件合并为一个,但保留原始属性,方法和事件等.
这就是我想在TScrollBox中使用TImage实现的目标.
解
Uwe Raabe的答案按预期工作.TImage现在在TScrollBox中注册,但显示为一个组件.TImage的属性在Object Inspector中显示为Image.>这将揭示TImage的属性:)
delphi ×1