我是这么写的Form1.OnCloseQuery(self;false);结果出错,请问怎么写?

解决方案 »

  1.   

    var
      CanClose:Boolean;
    begin
      Form1.OnCloseQuery(self;CanClose);
    end;但是不推荐自己调用这个函数,应该自己写一个函数,让这两个函数都调用它。
      

  2.   

    function oncloseyourform:boolean;
    begin
      do you want to do;
    end;
    onclick procedure;
    begin
       oncloseyourform;
       ...
    end;
      

  3.   

    to: tonylk(tony) 
    什么意思呢?和在click里写有什么不同?
      

  4.   

    还是不行,他的意思说好象缺参数not enough actual parameters
      

  5.   

    我试过了,我给你的这段代码是正确的,你试了再说对不对:var
      CanClose:Boolean;
    begin
      Form1.OnCloseQuery(self;CanClose);
    end;另,我说的另外再写一个函数调用,主要是为了防止程序的逻辑混乱,可以写成这样:
    procedure TForm1.DoFinalize();
    begin
      //do something
    end;procedure TForm1.OnCloseQuery(Sender:TObject;var CanClose:Boolean);
    begin
      DoFinalize();
    end;procedure TForm1.OnButton1Click(Sender:TObject);
    begin
      DoFinalize();
    end;
      

  6.   

    另,港才贴错了,是:
    Form1.OnCloseQuery(self,CanClose);//注意中间是逗号
    它和
    Form1.OnCloseQuery(self,false);
    的区别在于OnClose(Sender:TObject;var CanClose:Boolean)需要接受的第二个参数必须是一个变量。
      

  7.   

    谢谢,我明白了,还想问一句,你上面说的用另一个函数调用,我是想在click里控制窗体是否关闭,因为需要必须要给canclose=false,那么
    procedure TForm1.DoFinalize();
    begin
      //do something
    end;
    这个函数是不是应该带参数?而且和OnCloseQuery的参数一样?
      

  8.   

    而事实上我在OnClick事件中写Form1.OnCloseQuery(self,false)也不等于给系统的OnCloseQuery的CanClose赋值为false吧?好象并不管用,似乎只是执行OnCloseQuery中的流程,而并非真OnCloseQuery事件所达到的真正效果。我手工调用该过程,系统不知道是关闭窗口。
      

  9.   

    没有那么复杂吧?
    只要在OnClick事件中写上:self.Close; 就会自动执行OnCloseQuery中的代码。
    在OnCloseQuery的事件中:
    begin
      if MessageDlg('确认关闭?',mtConfirmation,[mbYes,mbNo],0)=mrYes then CanClose:=true else CanClose:=false;
    end;
      

  10.   

    而事实上我在OnClick事件中写Form1.OnCloseQuery(self,false)也不等于给系统的OnCloseQuery的CanClose赋值为false吧?好象并不管用,似乎只是执行OnCloseQuery中的流程,而并非真OnCloseQuery事件所达到的真正效果。我手工调用该过程,系统不知道是关闭窗口。
    ====================
    你理解得不错,如果你是想在buttononclick中关闭程序,并且防止用户直接点窗口右上方的关闭按钮来关闭程序,可以用这样:TForm1 = class(TForm)
    ...
    private
      FCanClose:Boolean;
    end;implementationprocedure TForm1.OnCreate();
    begin
      ..
      FCanClose:=false;
    end;procedure TForm1.OnButton1Click();
    begin
      FCanClose:=true;
      Close;
    end;procedure TForm1.OnCloseQuery(Sender:TObject;var CanClose:Boolean);
    begin
      if not FCanClose then begin
        ShowMessage('you can not close window');
      end;
      CanClose:=FCanClose;
    end;
      

  11.   

    可能是我没说明白,你们说的设置CANCLOSE的方法我会,结了。