Delphi 如何反序列化不带';你没有内置转换器吗?
这是我最后一个问题的副产品 既然Delphi不转换ModalResult属性,那么我将ModalResult属性转换为整数的最佳方式是什么 我真的不想:Delphi 如何反序列化不带';你没有内置转换器吗?,delphi,serialization,properties,Delphi,Serialization,Properties,这是我最后一个问题的副产品 既然Delphi不转换ModalResult属性,那么我将ModalResult属性转换为整数的最佳方式是什么 我真的不想: If SpecialCase then else if AnotherSpecialCase then else BehaveNormally 那么如何将'mrOk'等值转换为1 注意:我正在使用 PropInfo := GetPropInfo(Instance, PropertyName); SetPropValue(Instance,
If SpecialCase then
else if AnotherSpecialCase then
else BehaveNormally
那么如何将'mrOk'
等值转换为1
注意:我正在使用
PropInfo := GetPropInfo(Instance, PropertyName);
SetPropValue(Instance, PropInfo, PropertyValue);
设置属性值
Delphi 2007没有用于ModalResults的转换器,Delphi将整数表示存储在DFM中。作为解决方案,我注册了一个新的转换器
const
ModalResults: array[0..10] of TIdentMapEntry = (
(Value: mrNone; Name: 'mrNone'),
(Value: mrOk; Name: 'mrOk'),
(Value: mrCancel; Name: 'mrCancel'),
(Value: mrAbort; Name: 'mrAbort'),
(Value: mrRetry; Name: 'mrRetry'),
(Value: mrIgnore; Name: 'mrIgnore'),
(Value: mrYes; Name: 'mrYes'),
(Value: mrNo; Name: 'mrNo'),
(Value: mrAll; Name: 'mrAll'),
(Value: mrNoToAll; Name: 'mrNoToAll'),
(Value: mrYesToAll; Name: 'mrYesToAll'));
function ModalResultToIdent(ModalResult: Longint; var Ident: string): Boolean;
begin
Result := IntToIdent(ModalResult, Ident, ModalResults);
end;
function IdentToModalResult(const Ident: string; var ModalResult: Longint): Boolean;
begin
Result := IdentToInt(Ident, ModalResult, ModalResults);
end;
initialization
RegisterIntegerConsts(TypeInfo(TModalResult), IdentToModalResult, ModalResultToIdent);
您使用的是什么版本的Delphi?由于Delphi2010比以前的版本有更好的方法来实现这一点。我不知道要转换什么,mrOk已经是1了。您可以
PropertyValue:=mrOk
或SetPropValue(实例,PropInfo,mrOk)
。您自己对其他问题的回答是否有帮助?@Uwe-是!是的。但罗布指出这是一个不同的问题,并告诉我把它贴在网上such@Sertac-当序列化的mrOK不是常量时,它是字符串,SetPropValue(实例,PropInfo,'mrOK')失败。