2

给定以下类型声明:

  TMyEnum = (onehundred,twohundred,threehundred);
  TMyEnum2 = (Aonehundred = 100 , Atwohundred = 200 , Athreehundred = 300);

  TMyComponent = class(TComponent)
  private
    FMyEnum: TMyEnum;
    FMyEnum2: TMyEnum2;
  published
    property MyEnum: TMyEnum read FMyEnum write FMyEnum;
    property MyEnum2: TMyEnum2 read FMyEnum2 write FMyEnum2;
  end;

使用 TStream.WriteComponent 不会流式传输 MyEnum2。有谁知道这是为什么,如果可以解决?

4

2 回答 2

5

不幸的是,这是流媒体系统的限制。文档说(强调我的):

某些属性虽然是可发布的,但流系统并不完全支持。其中包括记录类型的属性、所有可发布类型的数组属性以及包含匿名值的枚举类型的属性。如果您发布此类属性,Object Inspector 将无法正确显示它,并且在将对象流式传输到磁盘时也不会保留该属性的值。

您无法轻松解决此问题,需要提供您自己的自定义流式传输

于 2012-07-04T15:38:03.447 回答
2

就像 David 说的那样,TMyEnum2具有匿名值,这就是流机制无法正确处理类型的原因。您确实可以提供自己的自定义流,或者您可以简单地省略枚举(放弃一点类型安全)并使用Integer和常量:

type
  TMyEnum = (onehundred, twohundred, threehundred);
  TMyEnum2 = type Integer;

const
  Aonehundred = 100; 
  Atwohundred = 200; 
  Athreehundred = 300;

现在,您可以随意使用和流式传输TMyEnum2(重命名为有用的名称后)。

于 2012-07-04T15:51:36.830 回答