Да, вроде, как бы обработчик события тоже свойство, просто специальное, и должно быть доступно через RTTI...
Вот примерная идея (там в последней строчке вываливается Invalid TypeCast, надо разбираться):
Код:
uses System.Rtti;
procedure TForm1.SetEvent(Obj : String; Evt : String; Mth : String);
var
ctx : TRTTIContext;
rtype : TRTTIType;
rmethod : TRTTIMethod;
rprop : TRttiProperty;
m : Pointer;
mm : TMethod;
o : TComponent;
begin
ctx := TRTTIContext.Create;
Try
rtype := ctx.GetType(Self.ClassType);
rmethod := rtype.GetMethod(Mth);
m := rmethod.CodeAddress;
mm.Code := m;
o := Self.FindComponent(Obj);
rtype := ctx.GetType(o.ClassType);
rprop := rtype.GetProperty(Evt);
rprop.SetValue(o,TValue.From(mm));
Finally
ctx.Free;
End;
end;
PS. Не работает для приватных методов (проверено). Для них просто RTTI не генерится, надо что бы был папблик.