枚举常量属性不会流

时间:2012-07-04 15:33:11

标签: delphi delphi-xe

给出以下类型声明:

  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。有人知道为什么会这样,如果可以解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

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

  

流媒体系统并不完全支持某些属性,尽管可以发布。这些包括记录类型的属性,所有可发布类型的数组属性以及包含匿名值枚举类型的属性。如果发布此类属性,则对象检查器将无法正确显示,并且在将对象流式传输到磁盘时也不会保留属性的值。

您无法轻松解决此问题,需要提供自己的custom streaming

答案 1 :(得分:2)

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

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

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

现在,您可以根据需要使用和流式传输TMyEnum2(在重命名之后)。