type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure MyExceptionHandler(Sender : TObject; E : Exception );
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyExceptionHandler(
Sender : TObject; E : Exception );
var
wRetVal : Word;
begin
wRetVal := MessageDlg(
{
E.Message contains the
actual error message
we'll customize it a bit...
}
'ERROR: ' + E.Message,
mtError,
mbAbortRetryIgnore,
0
);
case wRetVal of
mrAbort:
begin
{ handle "Abort" here... }
end;
mrRetry:
begin
{ handle "Retry" here... }
end;
mrIgnore:
begin
{ handle "Ignore" here... }
end;
else
begin
{
handle "other" action here...
for example, if user choose to
close the message box without
clicking on any buttons
}
end;
end;
{
you could also call the default
exception handler:
Application.ShowException( E );
}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException :=MyExceptionHandler;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
strtoint('fdf');
except on E :Exception do
MyExceptionHandler(sender,E);
end;
end;
procedure HandleError(Sender: TObject; E: Exception);
var
EForm:TF_errorhandle;
begin
Beep;
EForm:=TF_errorhandle.Create(self);
try
with EForm.re_error do
begin
with dm_shared.Q_info do
begin
close;
sql.clear;
sql.add('insert 事务日记表 (f_date,f_kind,f_message) values (:cdate,:ckind,:cmessage)');
parambyname('cdate').asdatetime:=now();
if E is EDBEngineError then
parambyname('ckind').asstring:='数据库错误'
else
parambyname('ckind').asstring:='系统错误';
parambyname('cmessage').asstring:=E.Message;
execsql;
end;
Lines.Add('错误信息及处理建议:');
Paragraph.Create(EForm.re_error);
Paragraph.LeftIndent:=4;
Paragraph.Numbering:=nsBullet;
if E is EDBEngineError then
Lines.Add('错误类型:数据库错误')
else
Lines.Add('错误类型:系统错误');
Lines.Add('错误原因:'+E.Message);
Paragraph.Numbering:=nsNone;
Lines.add('');
Lines.Add('处理建议:');
Paragraph.Create(EForm.re_error);
Paragraph.LeftIndent:=4;
Paragraph.Numbering:=nsBullet;
Lines.Add('1.重试一次刚才的操作');
Lines.Add('2.退出本系统再进入一次');
Lines.add('3.与开发商联系');
Paragraph.Numbering:=nsNone;
Lines.add('');
Lines.add('我们的联系方式:');
EForm.ShowModal;
end;
finally
EForm.free;
end;
可以
function HandleException(E:Exception):integer;
begin
ShowMessage('错误是:'+(e.Message));
end;
Procedure Tfrmmain.AppException(Sender:Tobject;E:Exception);
//主窗体
begin
HandleException(E);
end;