Delphi 通过名称调用方法[1]
Delphi 通过名称调用方法[1]
方法1:
type
TProcedure = procedure(Test: string) of object;
procedure ExecuteRoutine(Obj: TObject; Name, Param: string);
var
PMethod: TMethod;
AProcedure: TProcedure;
begin
PMethod.Data := Pointer(Obj);
PMethod.Code := Obj.MethodAddress(Name);
if Assigned(PMethod.Code) then
begin
AProcedure := TProcedure(PMethod);
AProcedure(Param);
end;
end;
提示:待调用方法声明为某个类的 published 方法,Obj 为拥有待调用方法的类的实例,Name 和 Param 分别为待调用方法的名字和参数。
使用示例:
ExecuteRoutine(Self,'方法/函数名称','参数')
方法2:
type
TTestStr=procedure(sStr:string) of object;
...
published
procedure TestStr(sStr:string);
end;
...
procedure TForm1.TestStr(sStr: string);
begin
ShowMessage(sStr);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SM:TTestStr;
begin
@SM := MethodAddress('TestStr'); //取得TestStr的指针地址
if @SM <> nil then //如果指针地址不为空
begin
SM('Hi,滔Roy'); //执行
end;
end;
注意:方法2的方法看似可行,针对弹框类的不会有问题,如果涉及到操作本身的对象,会造成内存泄露的错误,所以目前最可靠的方法是 方法1
创建时间:2020.10.28 更新时间:2022.01.10
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!