我是组件创建的新手,正在尝试使用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的属性:)
现在我使用2个数组,其中一个是TI,另一个是TMemo,用于在滚动框内的一行一行后面的文本数据旁边绘制一个图像.
我希望用Panel上的几个组件替换TMemo.所以可能是一些静态文本按钮和一些标签.但是我现在这样做的方式似乎会变得混乱.
没有编写组件或类,是否有更好的方法来解决这个问题.我应该使用某种多维数组,还是可以使用记录结构来声明组件并拥有一个数组呢?