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;