After much research, I decided as follows:
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;