Delphi - 创建组件子属性

问题描述

我正在使用 Delphi 开发组件。我被某些事情困住了,需要你的帮助。在我的组件中创建属性值时,我需要一个子属性。

enter image description here

简而言之,我希望它在ide上是这样的。我为此编写了以下示例代码。我在为测试目的编写的代码中遇到了一个我无法理解的问题。我的代码;

type
 TCheckValue = class(TPersistent)
  private
   FValue1: Boolean;
   FValue2: Boolean;
   FOnChange: TNotifyEvent;
   procedure Changed;
   procedure SetValue1(Value: Boolean);
   procedure SetValue2(Value: Boolean);
  public
   procedure Assign(Source : TPersistent); override;
   property OnChange : TNotifyEvent read FOnChange write FOnChange;
  published
   property Value1: Boolean read FValue1 write SetValue1 default true;
   property Value2: Boolean read FValue2 write SetValue2 default true;
 end;

组件:

type
 THBComp = class(TComponent)
    constructor create;
    destructor destroy; override;
   private
    FCheckValue: TCheckValue;
    procedure setCheckValue(Value: TCheckValue);
   published
    property CheckValue: TCheckValue read FCheckValue write setCheckValue;
 end;

TCheckValue 程序代码:

procedure TCheckValue.Changed;
begin
  if Assigned(FOnChange) then
  begin
    FOnChange(Self);
  end;
end;

procedure TCheckValue.SetValue1(Value: Boolean);
begin
  if FValue1 <> Value then
  begin
   FValue1 := Value;
   Changed;
  end;
end;

procedure TCheckValue.SetValue2(Value: Boolean);
begin
  if FValue2 <> Value then
  begin
   FValue2 := Value;
   Changed;
  end;
end;

procedure TCheckValue.Assign(Source : TPersistent);
begin
    if Source is TCheckValue then
  begin
    FValue1 := TCheckValue(Source).FValue1;
    FValue2 := TCheckValue(Source).FValue2;
    Changed;
  end else
    inherited;
end;

我用这些代码得到的结果如下:

enter image description here

所以在IDE端不显示Value1和Value2。我对此有一个不完整的定义吗?有没有关于这个主题的文档?我认为我的研究词有问题或文档有问题。

IDE 版本:10.4.2

我很抱歉我的英语不好。 非常感谢。

解决方法

TCheckValue 已正确实现。问题是您的 THBComp 构造函数不是 overrideTComponent 构造函数,因此当 TCheckValue 对象放置在在设计时形成,或从 DFM 流入。您需要实现该构造函数,例如。

THBComp

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...