procedure TForm1.appexception(Sender: TObject; E: Exception); begin if e is ESockError then exit else inherited; end; procedure TForm1.FormCreate(Sender: TObject); begin application.OnException:=appexception; end;
刚才的那个不要了,屏蔽了所有的exception,用这个把!///////////////////////// unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, NMsmtp, Psock, NMpop3, StdCtrls;type TForm1 = class(TForm) ApplicationEvents1: TApplicationEvents; NMPOP31: TNMPOP3; NMSMTP1: TNMSMTP; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } exceptionevent:texceptionevent; procedure appexception(Sender: TObject; E: Exception); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.appexception(Sender: TObject; E: Exception); begin if e is ESockError then exit else exceptionevent(sender,e);end;procedure TForm1.FormCreate(Sender: TObject); begin exceptionevent:=application.OnException; application.OnException:=appexception; end;procedure TForm1.Button1Click(Sender: TObject); begin strtoint('ss'); end;end.
try ... except on e:ESockError do showMessage('error'); end;
楼上的虽然正确,但是它拼逼不了下一步的错误!1. procedure TfrmMainForm.FormCreate(Sender: TObject); begin Application.OnException := Finder.MyException; end;2. procedure TFinder.MyException(Sender: TObject; E: Exception); begin if E is ERegistryException then <-------选择你自己要的,这是我的:-) begin ShowMsg(FHandle, 53, MB_ICONERROR); Abort; <----------------------- 注意这里的Abort,否则会~~ end else if E is ESockError then begin ShowMsg(FHandle, 31, MB_ICONERROR); Abort; <----------------- 这也是!! end else begin ShowMsg(FHandle, 54, MB_ICONINFORMATION); Abort; end; end;
屏蔽下一步的错误?不要把问题搞得那么复杂,就这么简单: try ... except on ESockError do HandleSockError; //你要的 on EZeroDivide do HandleZeroDivide; //别的 on EOverflow do HandleOverflow; //别的 ... //还有别的? else HandleAllOthers; //所有其它的 end;
E: Exception);
begin
if e is ESockError then
exit
else
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnException:=appexception;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AppEvnts, NMsmtp, Psock, NMpop3, StdCtrls;type
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
NMPOP31: TNMPOP3;
NMSMTP1: TNMSMTP;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
exceptionevent:texceptionevent;
procedure appexception(Sender: TObject;
E: Exception);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.appexception(Sender: TObject;
E: Exception);
begin
if e is ESockError then
exit
else
exceptionevent(sender,e);end;procedure TForm1.FormCreate(Sender: TObject);
begin
exceptionevent:=application.OnException;
application.OnException:=appexception;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
strtoint('ss');
end;end.
...
except
on e:ESockError do showMessage('error');
end;
procedure TfrmMainForm.FormCreate(Sender: TObject);
begin
Application.OnException := Finder.MyException;
end;2.
procedure TFinder.MyException(Sender: TObject; E: Exception);
begin
if E is ERegistryException then <-------选择你自己要的,这是我的:-)
begin
ShowMsg(FHandle, 53, MB_ICONERROR);
Abort; <----------------------- 注意这里的Abort,否则会~~
end else
if E is ESockError then
begin
ShowMsg(FHandle, 31, MB_ICONERROR);
Abort; <----------------- 这也是!!
end else
begin
ShowMsg(FHandle, 54, MB_ICONINFORMATION);
Abort;
end;
end;
try
...
except
on ESockError do HandleSockError; //你要的
on EZeroDivide do HandleZeroDivide; //别的
on EOverflow do HandleOverflow; //别的
... //还有别的?
else
HandleAllOthers; //所有其它的
end;