OnCloseQuery事件:
if () then//条件 
  CanClose := false;

解决方案 »

  1.   

    不行啊,那我的自定义的CLOSE 按钮就不起作用了啊
      

  2.   

    在你自定义的close按钮上夹代码。
    procedure TForm1.CloseBtnClick
    begin
       if ..........then Application.Terminate;
    end;
    如果是系统的生成的关闭按钮,则处理onclosequery
      

  3.   

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin
    if Messagedlg('您真的要退出程序吗!',mtWarning,mbYesNoCancel,0)=mrCancel then CanClose:=false;
    end;
      

  4.   

    你的自己定义的Close按钮里只要:Close;一句就可以了。
    所有条件判断都在OnCloseQuery中。
      

  5.   

    自定义一个全局布尔变量,当单击自己的按钮时设置该变量为真,然后重载onClose过程,在这个过程中判断这个全局变量的真假,若真,则设Action:=caFree,其余的交给系统处理。
    我一直都是这么做的,你可以试试,什么加不加分的,自家兄弟就无所谓了,哈哈……祝你好运。 
      

  6.   

    我今天问过这个问题,已经解决了,我是这样做的:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if MessageDlg('是否保存修改结果',mtConfirmation,[mbYes, mbNo],0)=mryes then
         begin
           IF Edit1.text='' then // 如果用户名为空
                    BEGIN
                      showmessage('请输入用户名');
                      Edit1.SetFocus;
                      ABORT;  //返回修改
                      EXIT;
                    END;
        end;
    end;
      

  7.   

    才一分,太省了吧?嘿嘿
    该说的楼上都说了,就在onclose事件中处理,不满足你条件的话,让action:=canone它就关闭不了了