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.