函数和过程参数能不能是一个函数或过程
function BuildChild(aOwner: TComponent; aChildClass: TChildFormClass;const Pro:TProcedure=nil): TChildForm;
这样写可以吗

解决方案 »

  1.   

    to: pdbird(老巢) 
    给个例子
      

  2.   

    function BuildChild(aOwner: TComponent; aChildClass: TChildFormClass;const Pro:TProcedure=nil): TChildForm;
    在上面的函数中,我想让参数Pro,做到可以执行,也可以不执行,我怎么做到
      

  3.   

    function BuildChild(aOwner: TComponent; aChildClass: TChildFormClass;const Pro:TProcedure=nil): TChildForm;
    begin
      if Assign(Pro) then
        ....
    end;//或者再加一个参数
      

  4.   

    Sorry!!  Assign->Assigned
      

  5.   

    type
      TMax = function (a, b :integer) :integer of object;TAClass = class
    private
      a, b :integer;
    public
      Max :TMax;
      function CalcMax(a, b :integer):integer;
      procedure Calc(Max :TMax);
    end;function TAClass.CalcMax(a, b:integer):integer;
    begin
      if a > b then
        result := a 
      else
        result := b;
    end;procedure TAClass.Calc(Max :TMax);
    begin
      ShowMessage(IntToStr(Max(a, b)));
    end;procedure TForm1.Button1Click(Sender :TObject);
    var
      TA :TAClass;
    begin
      TA := TAClass.Create;
      TA.Max := TA.CalcMax;
      TA.Calc(TA.Max);
    end;
      

  6.   

    当然可以了,不然怎么实现回调
    delphi里的事件就是这么实现的
    用函数指针
      

  7.   

    例子vcl里还不有的是这个是form的paint事件
    procedure TCustomForm.Paint;
    begin
      if Assigned(FOnPaint) then FOnPaint(Self);
    end;在看看FOnPaint的定义
    FOnPaint: TNotifyEvent;
    TNotifyEvent = procedure(Sender: TObject) of object;在看看属性FOnPaint的赋值
    property OnPaint: TNotifyEvent read FOnPaint write FOnPaint stored IsForm;
    procedure TCustomForm.DoClose(var Action: TCloseAction);
    begin
      if Assigned(FOnClose) then FOnClose(Self, Action);
    end;procedure TCustomForm.DoHide;
    begin
      if Assigned(FOnHide) then FOnHide(Self);
    end;procedure TCustomForm.DoShow;
    begin
      if Assigned(FOnShow) then FOnShow(Self);
    end;
    等等都是一样的
      

  8.   

    Linux2001(恋人不如自恋) 回答的很清楚了。首先要定义一个过程类:
    TMax = function (a, b :integer) :integer of object;然后这个类的实例就可以做为参数被传入到函数里了。并且它的实例可以直接加上指定类型的参数来运行。
      

  9.   

    Linux2001(恋人不如自恋) 回答的很清楚了。首先要定义一个过程类:
    TMax = function (a, b :integer) :integer of object;然后这个类的实例就可以做为参数被传入到函数里了。
    procedure Calc(Max :TMax);并且它的实例可以直接加上指定类型的参数来运行。
    Max(a, b);
      

  10.   

    主要是不满足我的要求,在function BuildChild(aOwner: TComponent; aChildClass: TChildFormClass;const Pro:TProcedure=nil): TChildForm;
    Pro我是不知道是什么函数或过程
      

  11.   

    主要是不满足我的要求,在function BuildChild(aOwner: TComponent; aChildClass: TChildFormClass;const Pro:TProcedure=nil): TChildForm;
    Pro我是不知道是什么函数或过程,我的Pro是TProcedure类型,我怎么做