mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 02:39:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{$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.
 | 
						|
 |