我用了TApplicationEvents的OnException事件后,好象其它的异常都不显示了,请教!

解决方案 »

  1.   

    try
    ---
    except
    ---
    end
      

  2.   

    捕捉你要的异常的,其他的就用raise e继续抛出异常
      

  3.   

    TApplicationEvents的OnException事件本就是让你自己处理应用程序异常的事件。如果你不在事件中显示异常信息,当然其它的异常都不显示了(调试过程除外)你在事件中写上Application.ShowException(E),看是不是和没有相应OnException事件时一样!
      

  4.   

    TApplicationEvents的OnException事件中是不能使用raise继续抛出的,那样会形成死循环,导致不可预料的错误
      

  5.   

    谢谢您的提醒,我真没注意这个问题,不过我也是象我说的那样用的,我的程序现在还在跑,并没有出现死循环的现象,而且我是将错误信息都加到Memo里面的时间也记录了,按您所说一有异常我的Memo里面应该会是爆满的,不过也没有,难道是因为某种巧合没有出现问题
      

  6.   

    请测试一下下面的被0除的异常代码,虽没有形成死循环,但是程序会自动退出(非调试状态下):procedure TForm1.Button1Click(Sender: TObject);
    var
      v: Integer;
    begin
      v := 0;
      ShowMessage(IntToStr(10 div v));
    end;procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
      E: Exception);
    begin
      raise E;
    end;
      

  7.   

    是的,我也测试确实有问题,捕捉到异常后再raise就死了,赶紧改程序,谢谢提醒:)
    var
      exc: Exception;procedure TForm1.Button1Click(Sender: TObject);
    begin
      exc := Exception.Create('Exception Raise');
      raise exc;
    end;
    procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
      E: Exception);
    begin
      Memo1.Lines.Add(e.Message + ' ' + FormatDateTime('HH:NN:SS',now));
      Sleep(2000);
      raise e;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      a,b,c: integer;
    begin
      a := StrToInt(Edit1.Text);
      b := StrToInt(Edit2.Text);
      c := a div b;
      Edit3.Text := IntToStr(c);
    end;