当询问后,再关闭程序,为什么点击取消的时候,程序虽然没有被关闭但是界面已经看不见了,看看代码:
procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   if (Application.MessageBox('确信要退出系统吗?','提示',MB_OKCANCEL+MB_ICONWARNING) <> IDCANCEL ) then
   begin
      Application.Terminate;
   end;
end;

解决方案 »

  1.   

    你的这段代码不应该写在这里,FORMCLOSE是在FORM关闭的时候触发
      

  2.   

    不能写在OnCLose里面,把这段代码写在OnCloseQuery里面
    这样写
       if (Application.MessageBox('确信要退出系统吗?','提示',MB_OKCANCEL+MB_ICONWARNING) = IDCANCEL ) then
       begin
      canclose:=false;  
       end;
      

  3.   

    Application.Terminate不能用在主窗体中OnClose事件中, OnClose事件是在
    窗体关闭时触发。
         Application.Terminate是退出程序中所有打开的窗口。
     
      

  4.   

    如果总是用Application.Terminate来关闭程序,这是极不明智的!
      

  5.   

    支持使用Application.Terminator(); 是关闭该程序在计算机内所有的进程的。但是楼主选择错误事件,应使用CloseQuery事件,才能达到目的
      

  6.   

    我给你一个:
          if application.messagebox('是否退出?', '提示',mb_YesNo+MB_APPLMODAL+MB_ICONQUESTION+MB_DEFBUTTON2)=idyes then
              canclose:=TRUE
          else
            CANCLOSE:=FALSE;
    这就没有问题了
      

  7.   

    应该写在这里面
    procedure TF_main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
       if application.messagebox('是否退出?', '提示',mb_YesNo+MB_APPLMODAL+MB_ICONQUESTION+MB_DEFBUTTON2)=idyes then
          canclose:=TRUE
       else
          CANCLOSE:=FALSE;
    end;
      

  8.   

    分太少了,谢谢大家,解决了
    不过还要改一下,或许是针对我的程序把
    procedure TF_main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
       if application.messagebox('是否退出?', '提示',mb_YesNo+MB_APPLMODAL+MB_ICONQUESTION+MB_DEFBUTTON2)=idyes then
          //canclose:=TRUE
         Application.Terminate
       else
          CANCLOSE:=FALSE;
    end;