代码如下:
procedure TSkatingfrm.AddRollerbladesClose(Sender: TObject; var CanClose: Boolean);
begin
   dm.ADOQRollerblades.Cancel;
end;procedure TSkatingfrm.RzToolButton1Click(Sender: TObject);
var ExtClickEvent: TNotifyEvent;
begin
  dm.ADOQRollerblades.Append;
  FaClass.ShowSheet(Skatingfrm.ScrollBox4,Skatingfrm.TabSheet4,@AddRollerbladesClose,520,360);
end;function ShowSheet(ScrollBox:TScrollBox;RzTabSheet:TRzTabSheet;NewEventValue: pointer=nil;width:integer=0;height:integer=0):String;
begin
...
end;报如下错误:
[Error] Skating.pas(393): Variable required

解决方案 »

  1.   

    procedure TSkatingfrm.RzToolButton1Click(Sender: TObject); 
    var ExtClickEvent: TNotifyEvent; 
    begin 
      dm.ADOQRollerblades.Append; 
      FaClass.ShowSheet(Skatingfrm.ScrollBox4,Skatingfrm.TabSheet4,@AddRollerbladesClose,520,360); 
    end; 
    这个改成:
    procedure TSkatingfrm.RzToolButton1Click(Sender: TObject); 
    var ExtClickEvent: TNotifyEvent; 
    begin 
      dm.ADOQRollerblades.Append; 
      FaClass.ShowSheet(Skatingfrm.ScrollBox4,Skatingfrm.TabSheet4,@TSkatingfrm.AddRollerbladesClose,520,360); 
    end; 下面是我测试的例子:
    procedure ShowTest(p:Pointer);
    Type Tp=procedure;
    var a:Tp;
    begin
      a:=Tp(p);
      a();
    end;procedure TForm3.Button1Click(Sender: TObject);
    begin
      ShowTest(@TForm3.test);
    end;procedure TForm3.test;
    begin
      showmessage('abc');
    end;不过我觉得改成下面的方式更好:
    Type
      Tp=procedure of object ;procedure ShowTest(p:Tp);
    begin
      p();
    end;procedure TForm3.Button1Click(Sender: TObject);
    begin
      ShowTest(self.test);
    end;procedure TForm3.test;
    begin
      showmessage('abc');
    end;
      

  2.   

    NewEventValue: pointer=nil;
    这里最好把函数的类型定义出来,这样会方便很多,我认为
      

  3.   

    类事件就是函数指针,参考一下VCL的类中是怎么定义的吧!
      

  4.   

    wzwcn,你好
    如果我要把这个过程付给其他事件怎么操作?比如:
    function ShowSheet(ScrollBox:TScrollBox;RzTabSheet:TRzTabSheet;NewEventValue: pointer=nil;width:integer=0;height:integer=0):String; 
    begin 
       showfrm := Tshowfrm.Create(nil);
       showfrm.OnCloseQuery := @EventValue;//这里应该怎么写
       ...
    end;
      

  5.   

    应该不是函数传递问题,你的函数都不是成员函数,所以你访问主窗体上组件时,必须加上类似form1.xxxx,指明组件所属
      

  6.   

    bdmh
     能不能说详细点,或贴出代码?
      

  7.   


      ShowSheet(Skatingfrm.ScrollBox4, Skatingfrm.TabSheet4, AddRollerbladesClose, 520, 360);function ShowSheet(ScrollBox:TScrollBox; RzTabSheet:TRzTabSheet; NewEventValue: TCloseQueryEvent; width:integer=0; height:integer=0):String;