|
@@ -0,0 +1,60 @@
|
|
|
|
+{$mode objfpc}{$H+}
|
|
|
|
+
|
|
|
|
+uses classes,typinfo;
|
|
|
|
+type
|
|
|
|
+ TA = class(TPersistent)
|
|
|
|
+ private
|
|
|
|
+ FOnTest: TNotifyEvent;
|
|
|
|
+ procedure SetOnTest(value: TNotifyEvent);
|
|
|
|
+ public
|
|
|
|
+ procedure CallTest;
|
|
|
|
+ published
|
|
|
|
+ property OnTest: TNotifyEvent read FOnTest Write SetOnTest;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ TB = class
|
|
|
|
+ public
|
|
|
|
+ procedure Test(Sender: TObject);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+procedure TA.SetOnTest(value: TNotifyEvent);
|
|
|
|
+begin
|
|
|
|
+ FOnTest := Value
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TA.CallTest;
|
|
|
|
+begin
|
|
|
|
+ if Assigned(FOnTest) then
|
|
|
|
+ OnTest(self)
|
|
|
|
+ else
|
|
|
|
+ WriteLn('OnTest no set');
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TB.Test(Sender: TObject);
|
|
|
|
+begin
|
|
|
|
+ WriteLn('Test Called');
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+var
|
|
|
|
+ A: TA;
|
|
|
|
+ B: TB;
|
|
|
|
+ PropInfo: PPropInfo;
|
|
|
|
+ Method: TMethod;
|
|
|
|
+begin
|
|
|
|
+ A := TA.Create;
|
|
|
|
+ B := TB.Create;
|
|
|
|
+
|
|
|
|
+ Method:=TMethod(@B.Test);
|
|
|
|
+
|
|
|
|
+ PropInfo:=GetPropInfo(A.ClassInfo, 'OnTest');
|
|
|
|
+ if Assigned(PropInfo) then begin
|
|
|
|
+ SetMethodProp(A, PropInfo, Method);
|
|
|
|
+ WriteLn('Testing SetMethodProp method');
|
|
|
|
+ A.CallTest;
|
|
|
|
+ end
|
|
|
|
+ else begin
|
|
|
|
+ WriteLn('PropInfo for ''OnTest'' not found');
|
|
|
|
+ Halt(1);
|
|
|
|
+ end;
|
|
|
|
+end.
|
|
|
|
+
|