类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
程序中有两个单元a,b。 其中单元a中有一个类c,单元b中有一个类d。
在类d中有一个函数e。
现在想从类c中调用e,现在从数据库中能够得到单元b的名称和函数的名称。
怎样调用e这个函数?
网友回答:
call a routine by its name?
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
// Your routines (that youll run by name) must be here
procedure Hello_World(Sender: TObject);
private
procedure ExecuteRoutine(Instance: TObject; Name: string);
end;
var
Form1: TForm1;
type
TExecute = procedure of object;
procedure TForm1.ExecuteRoutine(Instance: TObject; Name: string);
var
Routine: TMethod;
Execute: TExecute;
begin
Routine.Data := Pointer(Instance);
// Returns the address of a published method.
Routine.Code := Instance.MethodAddress(Name);
if Routine.Code = nil then Exit;
Execute := TExecute(Routine);
Execute;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteRoutine(Form1, Hello_World);
end;
procedure TForm1.Hello_World(Sender: TObject);
begin
ShowMessage(This is a test);
end;
Arri的正解,不过有一点要注意,就是MethodAddress函数只对于Published的方法有用。
所以你的函数一定要声明在Published中才行的。
可以 当Execute := TExecute(Routine); 得到函数后
直接Execute就可以了