这是菜单中的退出代码:
procedure TForm1.Q1Click(Sender: TObject);
var flag : integer;
begin
  if richedit1.Modified=True then
  begin
     flag:=application.messagebox('文件还没有保存, 要保存吗?', '迷你本本2005', mb_yesnocancel);
     if flag=idyes then
     begin
        if SaveDialog1.FileName='' then
           A1Click(Sender)
        else
           RichEdit1.Lines.SaveToFile(SaveDialog1.filename);
        close;
     end
     else if flag=idno then
      form1.Close;
  end
  else
    form1.close;end;我在主窗体的OnClose事件中调用这个代码:Q1Click(Sender); 
为何这样会出错?
当把OnClose事件去掉后,一切正常。
请问该怎样修改,才可使两个调用都正常?

解决方案 »

  1.   

    问题出在
    if SaveDialog1.FileName='' then
      A1Click(Sender)这样试试:procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    var
      flag : integer;
    begin
      CanClose:=False;
      if richedit1.Modified=True then
      begin
        flag:=application.messagebox('文件还没有保存, 要保存吗?', '迷你本本2005', mb_yesnocancel);
        if flag=idyes then
        begin
          try
            if SaveDialog1.FileName='' then
              SaveDialog1.Execute;
            RichEdit1.Lines.SaveToFile(SaveDialog1.filename);
            CanClose:=true;
          except      end;
        end
        else if flag=idno then
          CanClose:=True;
      end
      else
        CanClose:=True;
    end;
      

  2.   

    在onclose有调close,有出发ONCLOSE事件,在DELPHI是不允许的,同时也会内存益处
    正如楼上兄弟的方法,在这种情况下建议不要用ONCLOSE时间来触发,用ONCloseQuery可能好一些,同时避免在ONCloseQuery事件中不要在触发ONCloseQuery事件