Как я могу десериализовать свойства, которые не имеют встроенного конвертера? - PullRequest
2 голосов
/ 03 августа 2010

Это ответ на мой последний вопрос Как delphi конвертирует свойства ModalResult?

Поскольку Delphi не конвертирует свойства ModalResult, как мне лучше всего конвертировать свойства ModalResult?в целые числа?

Я действительно не хочу:

If SpecialCase then
else if AnotherSpecialCase then
else BehaveNormally

Так как мне преобразовать такие значения, как 'mrOk' в 1?

Примечание: IЯ использую

PropInfo := GetPropInfo(Instance, PropertyName);
SetPropValue(Instance, PropInfo, PropertyValue);

для установки значений свойств.

Delphi 2007

1 Ответ

3 голосов
/ 03 августа 2010

Конвертер для 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...