Como executar um método (procedure/function) pelo nome

 

Aqui está uma dica simples de como executar um método de um objeto Delphi pelo nome:

 

type

   TForm1 = class(TForm)

     Button1: TButton;

     procedure Button1Click(Sender: TObject);

     procedure CallMeByName(Sender: TObject);

   private

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

   end;

 

var

   Form1: TForm1;

 

type

   TExec = procedure of object;

 

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;