为什么 Delphi 不保存自定义组件的嵌套 属性?

Why does not Delphi save a custom component's nested property?

(Firemonkey,XE7) 我有一个带有 TTextControl 祖先的组件,引入了 SizeConstraints,仅基于 VCL 版本。 设计器不会将约束 属性 保存到 .FMX 文件中。 当我查看 "view form as text" 时,约束不存在,即使我之前编辑了 属性 值(是的,我可以在对象检查器中编辑它,但它没有保存) 这段代码有什么问题?

约束定义:

TSizeConstraints = class(TObject)
...
published
...
    property MaxHeight: Single index 0 read FMaxHeight write SetConstraints;
    property MaxWidth: Single index 1 read FMaxWidth write SetConstraints;
...
end;  

组件定义:

  ...
  published
    property Constraints : TSizeConstraints read FConstraints write SetConstraints;
  ...

procedure TMyComponent.SetConstraints(const Value: TSizeConstraints);
begin
  FConstraints.Assign(Value);
end;

并且TSizeConstraints.Assign确实复制了数据:

procedure TSizeConstraints.Assign( const C : TSizeConstraints );
begin
  if Assigned( C ) then
    begin
      FMinHeight := C.FMinHeight;
      FMaxHeight := C.FMaxHeight;
      FMinWidth := C.FMinWidth;
      FMaxWidth := C.FMaxWidth;
      Change;
    end;
end;

我错过了什么,还是 IDE 错误?

问题是您派生自 TObject。从 TComponent 派生此 class 以获得流媒体功能。或者可能 TPersistent 正如@NGLN 所建议的那样。

您还应该更改 Assign 方法以覆盖 TPersistent 中引入的虚拟 Assign