想实现动态调用过程,比如
type
TForm1 = class(TForm)
...
private
      procedure   x;
public
end;
var
Form1: TForm1;implementation{$R *.DFM}
procedure   TForm1.x;
begin
...
end;
end.
我在此单元中通过何种方式能够根据指定字符串‘x’调用过程x呢?
请高手指点,多谢!

解决方案 »

  1.   

    再加一个过程
    procedure Exec(strFunName: string);
    begin
      if strFunName = 'X' then
       x
      else if strFunName = 'Y' then
       y
      else ....
    end;
      

  2.   

    有一个函数 MethodAddress(const Name: ShortString): Pointer;可以获得指定字串的函数地址,然后通过函数地址调用
      

  3.   

    谢谢两位的回复,我查到了一些资料,与你们共享。procedure CallMethodByName(Obj: TObject; MethodName: string);
    type
      TProcOfObject = procedure of object;
    var
      Method: TMethod;
    begin
      Method.Code := Obj.MethodAddress(MethodName);
      if Method.Code = nil then
        raise Exception.Create('Method "'+MethodName+'" doesn''t exist or
    isn''t published')
      else
      begin
        Method.Data := TObject;
        TProcOfObject(Method);
      end;
    end;
    To do what you want to do just callCallMethodByName(Form1, 'mytest');
      

  4.   

    在帮助中查找一下procedure pointers。
      

  5.   

    这样的代码最好少用,它和编译器是有些关系,而编译器总在变化中,还是写个函数吧.就是说,在有的DELPHI版本中,可能编译不了,或者得到的并不是你所要的代码功能..
      

  6.   

    To budi:
      多谢关注,“将对象、函数地址、函数类型、调用名称按工作需要注册到一个自定义列表即可。”不是很明白,自定义列表是什么形式的,可否详细说一下,最好举个例子。To All:
      提到我的方案中存在编译器的依赖性问题,我很想详细了解问题出在哪里,或查阅何种资料。希望各位大侠能给更详细的描述,多谢!