当先锋百科网

首页 1 2 3 4 5 6 7
回调函数:

type 
  FunctionType = function(num: Integer): Integer; // 定义过程类型,申明在单元文件的type下面 Tform之前
 // TForm1 = class(TForm)

function Callback(n: Integer; cacu: FunctionType): Integer; // 定义回调函数 声明在类成员声明的地方

var // 定义程序使用的公共变量
function cacuMultiple(num: Integer): Integer; //声明和过程类型兼容的过程1
function cacuAdd(num: Integer): Integer;//声明和过程类型兼容的过程2 (放在单元的var下面)

//implementation // 程序代码实现部分
//{$R *.dfm}
//实现这些过程 在implementation下面;
    function cacuAdd(num: Integer): Integer;
    begin
      Result := num + 2;
    end;


    function cacuMultiple(num: Integer): Integer;
    begin
      Result := num * 2;
    end;


    function TForm1.Callback(n: Integer; cacu: FunctionType): Integer;
    begin
      Result := cacu(n);
    end;

在事件函数的var里面 声明函数指针变量, 然后给函数指针赋值
function_cacuAdd: FunctionType;
function_cacuMul: FunctionType;

//在事件函数里面使用这个回调函数
function_cacuMul := cacuAdd;  //给函数指针赋值 (注意这里只能是非类成员才能这样赋值)
function_cacuAdd := cacuMultiple; //给函数指针赋值
Edit1.Text := IntToStr(Callback(4, function_cacuMul)); //在回调函数中使用这些指针
Edit2.Text := IntToStr(Callback(4, function_cacuAdd));