呵呵,楼上的几位理解错了!问题是编译的时候提示Button2Click参数不够! 自己测试一下就知道了,如果是其他的函数或者过程就好了。 问题解决如下: if @[email protected] then .... 请给我多加点儿分啊! 弄了好久!
呵呵,楼上的都理解错了!编译的错误信息是说参数不够!问题是根本没有办法取得button2click的地址!测试一下就知道了,没有调查就没有发言权!(谁说的?),这个问题可变通一下!解决如下: 将 if @f=@button2Click then 改为: if @[email protected] then 就OK了。 我测试过的,没有问题! 全部的代码如下: 解决如下: procedure TForm1.Button1Click(Sender: TObject); var F:procedure (Sender:TObject) of Object; begin F:=Button2Click; TreeView1.Items.AddObject(nil,'test',@F); end;procedure TForm1.Button2Click(Sender: TObject); begin Inc(Form1.i);//这个Form1是一定用加的! Form1.Caption:=Sender.ClassName +' 调用次数'+IntToStr(Form1.I); end;procedure TForm1.TreeView1Click(Sender: TObject); var F:Procedure (Sender:TObject) of Object; begin if TreeView1.Selected.Data<>nil then begin F:=nil; @F:=TreeView1.Selected.Data; if @[email protected] then //Variable required !!! 在这里会出错,为什么? begin F(Sender); end; F:=nil; end; end;呵呵,多给我点儿分啊!我可是昨夜一宿没有睡好!
@F:=TreeView1.Selected.Data;
而不是判断这一句.
因为F本来就是一个指针了,你再取他的地址,所得的是一个右值,必须赋给一个变量.你再把一个值赋给他,肯定就出错了,所以才会说"Variable required"(要求变量).
自己测试一下就知道了,如果是其他的函数或者过程就好了。
问题解决如下:
if @[email protected] then
....
请给我多加点儿分啊!
弄了好久!
将 if @f=@button2Click then 改为:
if @[email protected] then 就OK了。
我测试过的,没有问题!
全部的代码如下:
解决如下:
procedure TForm1.Button1Click(Sender: TObject);
var
F:procedure (Sender:TObject) of Object;
begin
F:=Button2Click;
TreeView1.Items.AddObject(nil,'test',@F);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Inc(Form1.i);//这个Form1是一定用加的!
Form1.Caption:=Sender.ClassName +' 调用次数'+IntToStr(Form1.I);
end;procedure TForm1.TreeView1Click(Sender: TObject);
var
F:Procedure (Sender:TObject) of Object;
begin
if TreeView1.Selected.Data<>nil then
begin
F:=nil;
@F:=TreeView1.Selected.Data;
if @[email protected] then //Variable required !!! 在这里会出错,为什么?
begin
F(Sender);
end;
F:=nil;
end;
end;呵呵,多给我点儿分啊!我可是昨夜一宿没有睡好!
他的要求是判断f是否指向button2Click,不是判断是否有效!如果f指向别的过程用Assigned()判断也是有效的!那么进行调用的话,计数就会出现错误!
//Btw:你现在在CSDN工作?
to Kingron(WINAPI)我没有在CSDN工作,我现在失业在家。