Delphi RTTI alterar o valor da propriedade de um objeto que é propriedade de outro

26/08/2019

0

Tenho a seguinte

var vEstado : TEstado; 
begin
   vEstado := TEstado.Create;   
   vEstado.Codigo := 1;   
   vEstado.Nome := 'ESPIRITO SANTO';   
   vEstado.Sigla := 'ES';   
   vEstado.Pais.Codigo := 100;   
   vEstado.Pais.Nome := 'BRASIL';
end;


Gostaria de Alterar o vEstado.Pais.Codigo para 200 via RTTI.
Mr Ltda

Mr Ltda

Responder

Posts

26/08/2019

Mr Ltda

Depois de muita pesquisa, consegui resolver:

procedure TOrmRtti<T>.AtribuirValorPropriedade(pObjeto: T; pPropriedade: string;
  pValor: TValue);
var
  vContexto : TRttiContext;
  vTipo: TRttiType;
  vPropriedade, vSubPropriedade: TRttiProperty;
  vPos : integer;
begin
  vContexto := TRttiContext.Create;
  try
    vTipo := vContexto.GetType(pObjeto.ClassInfo);
    vPos := Pos('.', pPropriedade);
    if (vPos > 0) then
      begin
        vPropriedade := vTipo.GetProperty(copy(pPropriedade, 0, vPos-1));
        vSubPropriedade := vPropriedade.PropertyType.GetProperty(copy(pPropriedade, vPos+1, Length(pPropriedade)));
        vSubPropriedade.SetValue(vPropriedade.GetValue(Pointer(pObjeto)).AsObject, pValor);
      end
    else
      begin
        vPropriedade := vTipo.GetProperty(pPropriedade);
        vPropriedade.SetValue(Pointer(pObjeto), pValor);
      end;
  finally
    vContexto.Free;
  end;
end;
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar