procedure TFrmApply.FormClose(Sender: TObject; var Action: TCloseAction); 
being
if CheckChange=true then
  begin
   case messagedlg(swarningtext,mtconfirmation,mbYesNoCancel,0) of
   idyes:
     begin                     //要求保存
       FrmApply.InputData;
       if strall='' then Action:=Cafree;
     end;
   idno:Action:=Cafree ;        //关闭
   idcancel: FrmApply.WindowState:=wsnormal;
   end;
  end
  else Action:=Cafree;
end;CheckChange定义为Boolean;true时表示窗口的数据已变化,flase为没有变化swarningtext:='数据已经改变,是否要保存?'
FrmApply.InputData为自定义过程,包含一些保存数据到库的语句
其中窗口FrmApply包含很多的Edit和ComboBox,strall='' 表示必须填写的内容已经填写我在运行过程中,在点击cancel或ok的时候FrmApply窗体会最小化,其他都如愿运行,
我想问一下如何在点击cancel或ok后使FrmApply窗体保持原来的状态???我主要通过Edit.Modified和ComboBox.ItemIndex是否改变来判断数据是否改变过,请问还有其他更好的办法吗?

解决方案 »

  1.   

    to myadvice(不回头浪子) :没有这样的写法,出错了to tomma(人儿灯):刚刚试了,一切ok。非常感谢!!!! 
      

  2.   

    在OnCloseQuery中实现,Close关闭前要调用。如果没保存的话,不能退出可以设CanClose := false; 就可以了。
    另一种方式就是拦截WM_CLOSEQUERY消息。
      

  3.   

    to AWolfBoy(龍行江湖):OnCloseQuery方法我使用过,但如果选择“YES”,即保存,那么如果有些必要信息没有填写,这时应该有提示,然后再修改,但事实上,使用了OnCloseQuery以后,出现提示以后,窗体也关闭了,所以不能用。
      

  4.   

    var Action: TCloseAction
    中的TCloseAction有四种选择,分别为canone,cahide,cafree, caminimize分别对应取消,隐藏,释放,最小化
      

  5.   

    对了,关于Form的一些方法,比如说OnClose的帮助信息应该如何查询啊,还有它的一些参数,比如说Action,这次我的问题我想主要是不知道Action的值,请各位指点迷津!   分不够再给。
      

  6.   

    给你一个实例吧,不是你想的那样的。
    procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if MessageBox(handle, '数据已经修改,是否保存退出?', '系统提示', MB_OKCANCEL +  MB_ICONINFORMATION) = IDCANCEL then
        CanClose := false
      else 
        //保存处理,然后退出(当然你可以不退出,只要像上面一样,设置Canclose := false 就可以了,或者给个提示,让用户选择。
    end;在这个例子中,选择Cancel的话,就不会退出了。
      

  7.   

    帮人帮到底
    procedure TFrmApply.FormClose(Sender: TObject; var Action: TCloseAction); 当你需要查某个参数的说明时可以1:按住ctrl然后将鼠标移动到你需要查的类型,在上面的例子中就是按住ctrl将鼠标移动到
    TCloseAction然后你会发现TCloseAction下面出现一横线,然后单击即可2:选定TCloseAction按F1就有详细帮助了不要忘记给分啊  ^_^
      

  8.   

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if  Table1.State in [dsEdit, dsInsert] then
        if MessageDlg('table1正处于新增或修改状态,要保存吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
          table1.Post;
      CanClose := True;
    end;
      

  9.   

    非常感谢各位的帮助,现在我的问题已经解决了,多谢了!!
    to yuzhantao(找不到女朋友,只好养条狗):    很感谢你这次教会了我如何来解决这类问题,    希望以后多多指教!!