Delphi 如何反序列化不带';你没有内置转换器吗?

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,

这是我最后一个问题的副产品

既然Delphi不转换ModalResult属性,那么我将ModalResult属性转换为整数的最佳方式是什么

我真的不想:

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')失败。