使用NMSMTP控件,如果本地连接被禁用则执行NMSMTP.Connect语句会触发ESockError异常错误,应如何处理该异常错误?(最好有例子)

解决方案 »

  1.   

    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;
      

  2.   

    刚才的那个不要了,屏蔽了所有的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.
      

  3.   

    try
     ...
    except
     on e:ESockError do showMessage('error');
    end;
      

  4.   

    楼上的虽然正确,但是它拼逼不了下一步的错误!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;
      

  5.   

    屏蔽下一步的错误?不要把问题搞得那么复杂,就这么简单:
    try
     ...
    except
      on ESockError do HandleSockError; //你要的
      on EZeroDivide do HandleZeroDivide; //别的
      on EOverflow do HandleOverflow; //别的
      ... //还有别的?
    else
      HandleAllOthers; //所有其它的
    end;