用Application的onexception事件可以截获Delphi程序的几乎所有异常,这是一个比较狠的方法,可以让你程序永远不会弹出异常框。如下是TApplication.HandleException的源码:
if ExceptObject is Exception then
begin
if not (ExceptObject is EAbort) then
if Assigned(FOnException) then
FOnException(Sender, Exception(ExceptObject))
else
ShowException(Exception(ExceptObject));
end else
SysUtils.ShowException(ExceptObject, ExceptAddr);
从上面可以看出只要onexception不为nil,则Delphi就不会再显示这个异常了。
而且我刚才试了一下,异常后,之后的代码都不会再被执行到。
但是还有一个有趣的发现,如果你在onexception事件处理的代码中引发了异常,猜猜会怎么着?应用程序弹出未知错误框,然后会直接关闭,呵呵,所以小心了!