传递过程作为Delphi中的参数

时间:2015-05-19 22:55:35

标签: delphi

我有这段代码>

type
  TCallBack = procedure(APerc: Integer) of object;

...

procedure CallingProcedure(a, b, c: Integer; ACallBack: TCallBack = nil);

...

我从我的主类/对象中调用此函数,如下所示:

CallingProcedure(1, 2, 3, DoOnCallBack);

其中DoOnCallBack定义为:

procedure DoOnCallBack(APerc: Integer);

这编译好,不是问题 - 我做了很多次。

但是在CallingProcedure中,当我想检查Assigned(ACallBack)我是否会变错时。

有人可以告诉我我做错了什么。

我是从Thread调用的,这可能是个问题吗?

1 个答案:

答案 0 :(得分:2)

我对你所说的地方没有任何差异。语法是一样的。我刚刚做了一个小小的测试示例:

type
  TCallBack = procedure(APerc: Integer) of object;
  TForm20 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure CallingProcedure(a, b, c: Integer; ACallBack: TCallBack = nil);
    procedure DoOnCallBack(APerc: Integer);
  public
    { Public declarations }
  end;

var
  Form20: TForm20;

implementation

{$R *.dfm}

procedure TForm20.CallingProcedure(a, b, c: Integer; ACallBack: TCallBack);
begin
  if Assigned(ACallBack) then
    ACallBack(a);
end;

procedure TForm20.DoOnCallBack(APerc: Integer);
begin
  ShowMessage(IntToStr(APerc));
end;

procedure TForm20.FormCreate(Sender: TObject);
begin
  CallingProcedure(1, 2, 3, DoOnCallBack);
  CallingProcedure(1, 2, 3, nil);
end;

它运作得很好。 Ajust你的代码看起来像这样。由于您还没有发布您的真实代码,我只能猜出问题所在。