Delphi RTTI alterar o valor da propriedade de um objeto que é propriedade de outro
26/08/2019
0
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)