Delphi RTTI alterar o valor da propriedade de um objeto que é propriedade de outro
Tenho a seguinte
Gostaria de Alterar o vEstado.Pais.Codigo para 200 via RTTI.
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
Curtidas 0
Respostas
Mr Ltda
26/08/2019
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;
GOSTEI 0