码迷,mamicode.com
首页 > Windows程序 > 详细

delphi通过函数名动态调用函数的方法

时间:2015-03-03 18:02:17      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  TMyCacl = class(TObject)

  public

    { Public declarations }

    function DynamicFun(funName: string; const a, b: integer): integer;

  published

    function add(const a, b: integer): integer;

    function dec(const a, b: integer): integer;

  end;

  TNewMyCacl = class(TMyCacl)

  published

    function Multi(const a, b: integer): integer;

  end;

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

{ TMyCacl }

 

function TMyCacl.add(const a, b: integer): integer;

begin

  result := a + b;

end;

 

function TMyCacl.dec(const a, b: integer): integer;

begin

  result := a - b;

end;

 

function TMyCacl.DynamicFun(funName: string;const  a, b: integer): integer;

var

  pfun: function(const a, b: integer): integer of object;

begin

  if self.MethodAddress(funName) <> nil then

  begin

    TMethod(pfun).Code := MethodAddress(funName);

    result := pfun(a, b);

  end

  else  result := 0;

end;

 

{ TNewMyCacl }

 

function TNewMyCacl.Multi(const a, b: integer): integer;

begin

  result := a * b;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  tmp: TMyCacl;

  i: integer;

begin

  tmp := TNewMyCacl.Create();

  if tmp.MethodAddress(‘Multi‘) <> nil  then

  begin

    i := tmp.DynamicFun(‘Multi‘, 102, 3);

    showmessage(inttostr(i));

  end;

  tmp.Free;

end;

 

end.

 

delphi通过函数名动态调用函数的方法

标签:

原文地址:http://www.cnblogs.com/hsbs/p/4311347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!