Delphi - como executar uma procedure pelo nome

Top  Previous  Next

unit Unit1;

 

interface

 

uses Forms, Classes, Controls, StdCtrls, Dialogs;

 

type

  TForm1 = class(TForm)

    Button1: TButton;

     procedure CallMeByName(Sender: TObject) ;

    procedure Button1Click(Sender: TObject);

   private

     procedure ExecMethod(OnObject: TObject; MethodName: string) ;

  end;

 

type

   TExec = procedure of object;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.ExecMethod(OnObject: TObject; MethodName: string) ;

var

   Routine: TMethod;

   Exec: TExec;

begin

   Routine.Data := Pointer(OnObject) ;

   Routine.Code := OnObject.MethodAddress(MethodName) ;

   if NOT Assigned(Routine.Code) then Exit;

   Exec := TExec(Routine) ;

   Exec;

end;

 

procedure TForm1.CallMeByName(Sender: TObject) ;

begin

   ShowMessage('Hello Delphi!') ;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

   ExecMethod(Form1, 'CallMeByName') ;

end;

 

end.