application.onexception 全局异常的触发?(50分)

  • 主题发起人 主题发起人 张剑波
  • 开始时间 开始时间

张剑波

Unregistered / Unconfirmed
GUEST, unregistred user!
那位仁兄给段代码?
我的太复杂。
 
1.

Declare your custom exception handler:
eklariere den eigenen globalen Exception Handler:
}


{ Public declarations }
procedure MyExceptionHandler(Sender : TObject; E : Exception );


{2.

Define your exception handler in the "implementation" section:
In den Implementations-Abschnitt kommt dieser Code:
}

procedure TForm1.MyExceptionHandler(Sender : TObject; E : Exception );
begin
MessageDlg('ERROR: ' + E.Message);
end;


{3.

Assign the created exception handler to your application's OnException event.
Weise dem OnException Ereignis den eigenen Exception Handler zu.
}

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := MyExceptionHandler;
end;
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
//你的出错信息。
end;

end.
 
基础知识不行,接上面的例子:
在程序中直接调用
raise
全局application.onexception 全局异常的触发了,
可是在MyExceptionHandler(Sender : TObject; E : Exception );中:
sender, E 我没有指定,跟平常的过程不一样,这就是“继承性”,理解不透切。
再出50分,开导开导我!

 
楼上几位的程序有的缺点:
应该在project定义,尽量不要在mainform定义。
 
Delphi抛出异常是对错误处理的面向对象的解决方案。
当你把你的语句包裹在try...except...end.语句块中时,假如该语句发生处理异常,那么
程序流程将转向except块中,在执行完该块的所有语句后,它将继续执行except块后面的语句。
但假如你并没有用该语句包裹你的语句,那么,程序流程会继续转向上一级的except块,只
到最外层的由Application包裹的except块中,这样假如你在Application的OnException块中写
语句的话,就可以从最后一层控制异常。其实,假如你在一个按钮中用raise引发异常,如:
raise EMathError.Create('EMathError');而你在Application的OnException中只写一个//
即不写任何语句,这时,Delphi将不做任何处理,没有任何反应!因为,它认为你已经决定
自己处理这个异常,可是你并没有写你的代码,但你却建立了该过程!
 
多人接受答案了。
 
http://211.101.4.25/delphibbs/dispq.asp?lid=1151032
Archerfl先生请那分
 
后退
顶部