改为if @[email protected] then

解决方案 »

  1.   

    问题应出在
    @F:=TreeView1.Selected.Data;
    而不是判断这一句.    
    因为F本来就是一个指针了,你再取他的地址,所得的是一个右值,必须赋给一个变量.你再把一个值赋给他,肯定就出错了,所以才会说"Variable required"(要求变量).
      

  2.   

    呵呵,楼上的几位理解错了!问题是编译的时候提示Button2Click参数不够!
    自己测试一下就知道了,如果是其他的函数或者过程就好了。
    问题解决如下:
    if @[email protected] then
      ....
    请给我多加点儿分啊!
    弄了好久!
      

  3.   

    呵呵,楼上的都理解错了!编译的错误信息是说参数不够!问题是根本没有办法取得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;呵呵,多给我点儿分啊!我可是昨夜一宿没有睡好!
      

  4.   

    先用Assigned(F)判断F是否有效,再进行操作
      

  5.   

    2 Firing_Sky(火的天空):
      他的要求是判断f是否指向button2Click,不是判断是否有效!如果f指向别的过程用Assigned()判断也是有效的!那么进行调用的话,计数就会出现错误!
    //Btw:你现在在CSDN工作?
      

  6.   

    谢谢大家!
    to Kingron(WINAPI)我没有在CSDN工作,我现在失业在家。