是这样的:
    在点击主窗体右上角的X(关闭)按钮时,Showmodal一个确认对话框(有两个按钮:确定、取消)。
    我想实现的功能是:点击确认---结束整个程序,点击取消——放弃退出整个程序,点击该对话框右上角的X——放弃退出整个程序。
    目前的问题是:点击上述三处皆会退出整个程序。    有请高手指点。不胜感激!!

解决方案 »

  1.   

    在onclose事件中canclose:=true;是可以关闭
    canclose:=false;非可以关闭你可以在用户在showodal中所按的按扭来进行相应的选择操作,,,,祝:身体健康,答案和分数同样重要!!
      

  2.   

    To:ghyghost(著名关心CSDN结贴率爱国主义人士代表)哈,应该是OnCloseQuery事件吧。
      

  3.   

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if messagedlg('是否关闭',mtinformation,[mbok,mbcancel],0)=mrok then action:=canone else application.Terminate;
    end;
      

  4.   

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin
      if MessageDlg('Close application ?', mtConfirmation,
        [mbYes, mbNo], 0) = mrYes then
        Action := caFree
      else
        Action := caNone;
    end;
      

  5.   

    不用自己写确认对话框,用Application.MessageBox就能做到了:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if Application.MessageBox('请确认是否退出程序?','提示',
                                MB_OKCANCEL+MB_ICONQUESTION)
         <> ID_OK then Action := caNone;  // 不点OK就不退出
    end;
      

  6.   

    是在  FormCloseQuery事件中的。
      

  7.   

    canclose:=true
    它说canclose未定义。
    我也觉得没有这个属性!
      

  8.   

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
        if MessageDlg('是否退出?',mtConfirmation,[mbyes,mbno], 0) <> mryes then
          CanClose := false;
    end;
      

  9.   

    弄反了;修改如下:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if messagedlg('是否关闭',mtinformation,[mbok,mbcancel],0)<>mrok then action:=canone else application.Terminate;
    end;
      

  10.   

    When the user attempts to close the form in this example, a message dialog appears that asks the user if it is OK to close the form. If the user chooses the OK button, the form closes. If the user chooses Cancel, the form doesn't close.procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin
      if MessageDlg('Close the form?', mtConfirmation,
        [mbOk, mbCancel], 0) = mrCancel then
         CanClose := False;
    end;
      

  11.   

    嘻嘻,十分sorry,,在网吧中,,记忆力书写,,难免有错,还请各位有机器有delphi环境的高手给出正确答案:)
      

  12.   

    同意(死树)的
    同意用Application.MessageBox 而messagedlg不是中文的,我认为尽量用Application.MessageBox,它的风格更人性化
    我一般是这样做的:在Form的OnClose事件添加:
      IF Application.MessageBox('真的要退出吗?请确认.','提 示!',MB_OKCANCEL+MB_IconInformation)=IDOK THEN
      Begin
        Application.Terminate;
      End;
      

  13.   

    方法一:
       见 panyong2002() 兄回帖
    方法二:
      procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
       if messagedlg('是否关闭',mtinformation,[mbok,mbcancel],0)=mrok then
          CanClose:=True
       else CanClose:=False;
    end;方法三:
      见  sysu(死树)的回帖
      
      

  14.   

    sysu(死树) 的回答就是正确的,
    if Application.MessageBox('请确认是否退出程序?','提示',
                                MB_OKCANCEL+MB_ICONQUESTION)
         <> ID_OK then Action := caNone;  // 不点OK就不退出