title: How can I set/get property value through RTTI for complex things like TStringGrid.Cells?
body: <p>I have values stored in xml and lua code and accessing object's properties through RTTI.</p>
  
  <pre><code>var
    o, v: TValue; // o is current object
    a: TStringDynArray; // params as array
    ctx: TRttiContext;
    tt: TRttiType;
    p: TRttiProperty;
    pt: PTypeInfo;
  begin
  ...
    ctx := TRttiContext.Create;
    try
      o := GetLastClassInParams(ctx, obj, a, param_idx);
      tt := ctx.GetType(o.TypeInfo);
      if high(a) &lt; param_idx then
          raise Exception.Create(S_FN + S_NOP);
      p := tt.GetProperty(a[param_idx]);
      if p = nil then
          raise Exception.Create(S_FN + S_PNE + a[param_idx]);
      pt := p.PropertyType.Handle;
      case p.PropertyType.TypeKind of
        tkInteger: v := TValue.From&lt;integer&gt;(integer(Value));
        tkEnumeration: v := TValue.FromOrdinal(pt, GetEnumValue(pt, VarToStr(Value)));
        tkUString: v := TValue.From&lt;string&gt;(VarToStr(Value));
        tkFloat: v := TValue.From&lt;double&gt;(double(Value));
        tkSet: begin
            temp_int := StringToSet(pt, VarToStr(Value));
            TValue.Make(@temp_int, pt, v);
          end;
      else v := TValue.FromVariant(Value);
      end;
      p.SetValue(o.AsObject, v);
  </code></pre>
  
  <p>I can work with many properties like <code>Width</code>, <code>Lines.Text</code> of TMemo etc, even with <code>Panels[0].Width</code> of TStatusBar (where Panels is TCollection descendant), but thing like <code>TStringGrid.Cells[x, y]</code> is something I can't solve.
  There is help on Embarcadero and some functions like <code>GetIndexedProperty</code> (maybe that is what I need), but explanation there as good as <code>"Gets Indexed Property"</code>.  </p>
  
  <p>How to set and get <code>TStringGrid.Cells[x,y]</code> through RTTI at runtime if I have values stored as strings like <code>"Cells[1,1]"</code>?</p>