Delphiのメソッドをメソッド名から実行する方法。
元ネタは「Execute a Delphi Method (Procedure/Function) by Name」より。
ヘルプの「System.TObject.MethodAddress」にも同じことが書かれていました。
次のような関数を用意します。
procedure ExecMethod(OnObject: TObject; MethodName: string);
type
TExec = procedure of object;
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;
あとはこの関数を使って、目的のメソッドを実行します。
# Form1.Button1Clickを実行する
ExecMethod(Form1, 'Button1Click');
追記
実行できるメソッドは可視性がpublishedでなければならないようです。