文本编辑,希望在退出是判断文本是否有修改然后选择是否存盘或者取消退出操作。
但是每次关闭Form的时候它都是先关闭Form再弹出MessageBox,用菜单中的Exit选项没有问题。我的代码如下,请问该如何处理。它同时与Form1的OnDestroy事件关联。FileExit是退出菜单项。procedure TForm1.FileExitExecute(Sender: TObject);
begin
  if dirty=true then
    begin
      dirty:=false;
      Case MessageBox(Form1.Handle, '文件被修改是否保存!', '警告', MB_YESNOCANCEL) of
        IDYES:
          begin
            if(FileName='Untitled.txt') then
              FileSaveAs1.Execute
            else
              Richedit1.Lines.SaveToFile(FileName);
            Close;
          end;
        IDNO:Close;
        IDCANCEL:
          begin
            dirty:=true;
          end;
      end;
    end;
end;

解决方案 »

  1.   

    做一个全局变量 If_Save
    如果按了保存按钮 If_Save=true;
    如果进行修改 If_Save=false;
    在onclose 判断 If_Save 的值
      

  2.   

    我觉的你这段判断文件的代码
    放在窗体的
    OnCloseQuery比较好
      

  3.   

    也就是将这个变量传递给FileExitExecute和Form1.OnDestroy是吗?这样能保证Form在关闭时是先调用Messagebox??谢谢,我试试。
      

  4.   

    to xzgyb(老达摩):嗯,谢了。
      

  5.   

    to xzgyb(老达摩):  Oh, no still has some problem. It can show Messagebox before the form close, but when I push the "Cancel" botton, it always close the form. How can I keep the form activate when I choose "Cancel" ?  Thank you.
      

  6.   

    不谢
    procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      Case MessageBox(Handle, '文件被修改是否保存!', '警告', MB_YESNOCANCEL) of
            IDYES:
               ShowMessage('Yes');
            IDNO:
               ShowMessage('NO');
            IDCANCEL:
            begin
               ShowMessage('Cancel');
               CanClose := False;
            end;    
          end;end;
      

  7.   

    Thanks all. I got it.