Gibt es einen Weg das Coding zum Laufen zu bringen, ohne im dynamischen Coding das Symbol TNotifyEvent zu benutzen?
Verstehe nicht den Grund für diese Bedingung, aber bei deiner Umsetzung fliegt dir der TValue.Cast um die Ohren. Vielleicht hilft das:
Delphi-Quellcode:
var
strList: TStringList;
changeEvent: TEventArgsRef;
begin
var wrapper: TWrapper := TWrapper.Create;
try
strList := TStringList.Create;
try
strList.OnChange := wrapper.DoChange1;
strList.Add('Test1');
var rttiType: TRttiType := TRttiContext.Create.GetType(TypeInfo(TStringList));
if rttiType <> Nil then
begin
var rttiProp: TRttiProperty := rttiType.GetProperty('OnChange');
if (rttiProp <> Nil)
and (rttiProp.PropertyType.TypeKind = tkMethod) then
begin
changeEvent := wrapper.DoChange2;
var eventValue: TValue := rttiProp.GetValue(strList);
TValueData(eventValue).FAsMethod.Code := TMethod(changeEvent).Code;
rttiProp.SetValue(strList, eventValue);
strList.Add('Test2');
end;
end;
finally
strList.Free;
end;
finally
wrapper.Free;
end;
end;
Bis bald...
Thomas