GetMethodProp
Return value of a method property
Declaration
Source position: typinfo.pp line 942
  function GetMethodProp(Instance: TObject; PropInfo: PPropInfo) : TMethod;
  function GetMethodProp(Instance: TObject; const PropName: string)
                         : TMethod;
Description
GetMethodProp returns the method the property described by PropInfo or with name Propname for object Instance. The return type TMethod is defined in the SysUtils unit as:
TMethod = packed record
  Code, Data: Pointer;
end;                                                                         
Data points to the instance of the class with the method Code.
Errors
No checking is done whether Instance is non-nil, or whether PropInfo describes a valid method property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception.
See also
| Name | Description | 
|---|---|
| GetEnumProp | Return the value of an enumeration type property. | 
| GetFloatProp | Return value of floating point property | 
| GetInt64Prop | return value of an Int64 property | 
| GetObjectProp | Return value of an object-type property. | 
| GetOrdProp | Get the value of an ordinal property | 
| GetSetProp | Return the value of a set property. | 
| GetStrProp | Return the value of a string property. | 
| SetMethodProp | Set the value of a method property | 
Example
program example6;
{ This program demonstrates the GetMethodProp function }
{$mode objfpc}
uses rttiobj,typinfo,sysutils;
Type
  TNotifyObject = Class(TObject)
    Procedure Notification1(Sender : TObject);
    Procedure Notification2(Sender : TObject);
  end;
Procedure TNotifyObject.Notification1(Sender : TObject);
begin
  Write('Received notification 1 of object with class: ');
  Writeln(Sender.ClassName);
end;
Procedure TNotifyObject.Notification2(Sender : TObject);
begin
  Write('Received notification 2 of object with class: ');
  Writeln(Sender.ClassName);
end;
Var
  O : TMyTestObject;
  PI : PPropInfo;
  NO : TNotifyObject;
  M : TMethod;
Procedure PrintMethod (Const M : TMethod);
begin
  If (M.Data=Pointer(NO)) Then
    If (M.Code=Pointer(@TNotifyObject.Notification1)) then
      Writeln('Notification1')
    else If (M.Code=Pointer(@TNotifyObject.Notification2)) then
      Writeln('Notification2')
    else
      begin
      Write('Unknown method adress (data:');
      Write(hexStr(Longint(M.data),8));
      Writeln(',code:',hexstr(Longint(M.Code),8),')');
      end;
end;
begin
  O:=TMyTestObject.Create;
  NO:=TNotifyObject.Create;
  O.NotifyEvent:=@NO.Notification1;
  PI:=GetPropInfo(O,'NotifyEvent');
  Writeln('Method property : ');
  Write('Notifying                    : ');
  O.Notify;
  Write('Get (name)                   : ');
  M:=GetMethodProp(O,'NotifyEvent');
  PrintMethod(M);
  Write('Notifying                    : ');
  O.Notify;
  Write('Get (propinfo)               : ');
  M:=GetMethodProp(O,PI);
  PrintMethod(M);
  M:=TMethod(@NO.Notification2);
  SetMethodProp(O,'NotifyEvent',M);
  Write('Set (name,Notification2)     : ');
  M:=GetMethodProp(O,PI);
  PrintMethod(M);
  Write('Notifying                    : ');
  O.Notify;
  Write('Set (propinfo,Notification1) : ');
  M:=TMethod(@NO.Notification1);
  SetMethodProp(O,PI,M);
  M:=GetMethodProp(O,PI);
  PrintMethod(M);
  Write('Notifying                    : ');
  O.Notify;
  O.Free;
end.