gpt4 book ai didi

delphi - 组件创建 - 将组件连接在一起?

转载 作者:行者123 更新时间:2023-12-03 14:41:42 26 4
gpt4 key购买 nike

我是组件创建的新手,正在尝试使用 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.

如果我将上面的内容编译安装成包,结果如下:

enter image description here

enter image description here

问题

我希望将我的组件注册为一个组件。但该组件应该是 TScrollBox 和 TImage 的组合。主要组件将是 TScrollBox,但它现在也应该可以访问 TImage 的属性和事件等。

例如,TMyPanel 可以共享 TImage 和 TScrollBox 的属性:

  • 自动调整大小
  • 边框样式
  • 水平滚动条
  • 父背景
  • 图片
  • 垂直滚动条

我认为完全编写一个新组件来执行上述行为有点矫枉过正,而且我真的不知道从哪里开始。如果可以实现这一点,您可以创建一些有趣的组件,将它们组合成一个,但保留原始属性、方法和事件等。

这就是我想通过 TScrollBox 内的 TImage 实现的目标。

解决方案

Uwe Raabe 显示的答案符合预期。 TImage 现在已在 TScrollBox 内注册,但显示为一个组件。 TImage 的属性在对象检查器中显示为图像。 > 这将揭示 TImage 的属性:)

最佳答案

您应该使图像成为 TMyPanel 的子组件:SetSubComponent

更新:这是一个示例

unit MyComponent;

interface

uses
System.Classes,
VCL.Controls,
VCL.Forms,
VCL.ExtCtrls;

type
TMyPanel = class(TScrollBox)
private
FImage: TImage;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Image: TImage read FImage;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [TMyPanel]);
end;

constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

FImage := TImage.Create(Self);
FImage.SetSubComponent(true);
FImage.Align := alClient;
FImage.Parent := Self;
end;

destructor TMyPanel.Destroy;
begin
inherited;
end;

end.

关于delphi - 组件创建 - 将组件连接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9479872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com