给出以下类型声明:
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。有人知道为什么会这样,如果可以解决这个问题吗?
答案 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
(在重命名之后)。