如何 捕捉 程序或所有控件 发出的所有异常 信息 , 并 屏闭这些信息 换成 自己的信息 ??????????? 急!!!!!!!!!!
如何 捕捉 程序或所有控件 发出的所有异常 信息 , 并 屏闭这些信息 换成 自己的信息 ???????????
还有如何 如何知道是那一个控件发出的异常???
问题点数:10、回复次数:10Top
1 楼lzg827(小刚)回复于 2006-06-04 11:29:34 得分 0
所有???
这个好像不在可能吧
我觉得只能自己一个一个的写
try
//可能出错的代码
except
//自己的提示
end;
另:在exe下,或者被调用的时候才会被捕捉到错误
Top
2 楼fsqman(q)回复于 2006-06-04 12:08:27 得分 0
upTop
3 楼fsqman(q)回复于 2006-06-04 12:43:45 得分 0
自己写代码当然可以用
try
//可能出错的代码
except
//自己的提示
end;
捕捉异常, 但对于 程序和控件 内部 发出的异常就不知道如何 捕捉了 !!
举例:
dbgrid 设置了一个列,但这个列在 sql 语句是 没有的,运行时 dbgrid 就会用英文抛出一个异常信息说没有这个列等, 对于控件 内部 发出的异常,如何 捕捉 异常 信息 , 并 屏闭这些信息 换成 自己的信息???
Top
4 楼fsqman(q)回复于 2006-06-04 16:27:06 得分 0
upTop
5 楼lzg827(小刚)回复于 2006-06-04 16:34:42 得分 0
to:fsqman(q)
我明白你的意思
应该是写在源码里面,然后重新编译
不过工作量嘛,难说了。
嘿嘿Top
6 楼happyggy(Delphi<-&&->java)回复于 2006-06-04 16:56:53 得分 10
TestException = class( Exception)
TTest = class
private
_Err: integer;
_ErrMsg: string;
_ErrPos: integer;
protected
procedure MakeErrMsg(Err, Para, Pos: integer);
procedure RaiseErr(Err, Para, Pos: integer);
public
property Err: integer read _Err;
property ErrPosition: integer read _ErrPos;
property ErrMsg: string read _ErrMsg;
end;
procedure TTest.MakeErrMsg(Err, Para, Pos: integer);
begin
_Err := Err;
case Err of
ERR_INVALID_CHAR:
begin
_ErrMsg := '非法';
end;
ERR_INVALID_CHAR_COMMA:
begin
_ErrMsg := '非法';
end;
ERR_NO_BRACKET_R:
begin
_ErrMsg := '';
end;
ERR_NULL_STR:
begin
_ErrMsg := '空字符串';
end;
ERR_INVALID_IV_NAME:
begin
_ErrMsg := EXCEPTION_INVALID_IV_NAME;
if (Para >= AO_POWER)and (Para < _slCh.Count) then
_ErrMsg := _ErrMsg + ': 与函数同名'
else
_ErrMsg := _ErrMsg + ': 不能包含运算符及标点符号'
end;
ERR_INVALID_IV_NAME_CANT_BE_DIGIT:
begin
_ErrMsg := EXCEPTION_INVALID_IV_NAME_CANT_BE_DIGIT;
end;
ERR_INVALID_OPERATOR:
begin
_ErrMsg := '非法的运算符: ';
end;
ERR_INVALID_FUNCTION_ARG:
begin
_ErrMsg := '非法的函数参数: ' + _slCh.Strings[Para];
end;
else
begin
_ErrMsg := '未知错误';
end;
end;
end;
procedure TTest.RaiseErr(Err, Para, Pos: integer);
begin
MakeErrMsg(Err, Para, Pos);
raise MathParserException.Create(_ErrMsg);
end;Top
7 楼fsqman(q)回复于 2006-06-04 17:36:52 得分 0
请问楼上的具体是怎样用的????Top
8 楼fsqman(q)回复于 2006-06-04 17:49:27 得分 0
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrlsEh, DB, ADODB, Grids, DBGridEh, ExtCtrls,
SUIDBCtrls, DBCtrls, ComCtrls;
type
TForm1 = class(TForm)
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBComboBoxEh1: TDBComboBoxEh;
CheckBox1: TCheckBox;
DBEdit1: TDBEdit;
ADODataSet2: TADODataSet;
DataSource2: TDataSource;
private
{ Private declarations }
public
{ Public declarations }
end;
TestException = class( Exception) ;
type
TTest = class
private
_Err: integer;
_ErrMsg: string;
_ErrPos: integer;
protected
procedure MakeErrMsg(Err, Para, Pos: integer);
procedure RaiseErr(Err, Para, Pos: integer);
public
property Err: integer read _Err;
property ErrPosition: integer read _ErrPos;
property ErrMsg: string read _ErrMsg;
end;
var
Form1: TForm1;
a:bool;
implementation
uses unit2;
{$R *.dfm}
procedure TTest.MakeErrMsg(Err, Para, Pos: integer);
begin
_Err := Err;
case Err of
ERR_INVALID_CHAR:
begin
_ErrMsg := '非法';
end;
ERR_INVALID_CHAR_COMMA:
begin
_ErrMsg := '非法';
end;
ERR_NO_BRACKET_R:
begin
_ErrMsg := '';
end;
ERR_NULL_STR:
begin
_ErrMsg := '空字符串';
end;
ERR_INVALID_IV_NAME:
begin
_ErrMsg := EXCEPTION_INVALID_IV_NAME;
if (Para >= AO_POWER)and (Para < _slCh.Count) then
_ErrMsg := _ErrMsg + ': 与函数同名'
else
_ErrMsg := _ErrMsg + ': 不能包含运算符及标点符号'
end;
ERR_INVALID_IV_NAME_CANT_BE_DIGIT:
begin
_ErrMsg := EXCEPTION_INVALID_IV_NAME_CANT_BE_DIGIT;
end;
ERR_INVALID_OPERATOR:
begin
_ErrMsg := '非法的运算符: ';
end;
ERR_INVALID_FUNCTION_ARG:
begin
_ErrMsg := '非法的函数参数: ' + _slCh.Strings[Para];
end;
else
begin
_ErrMsg := '未知错误';
end;
end;
end;
procedure TTest.RaiseErr(Err, Para, Pos: integer);
begin
MakeErrMsg(Err, Para, Pos);
raise MathParserException.Create(_ErrMsg);
end;
但编译时出错,信息如下:
[Error] Unit1.pas(85): Undeclared identifier: 'ERR_INVALID_CHAR'Top
9 楼fsqman(q)回复于 2006-06-05 17:16:08 得分 0
upTop
10 楼happyggy(Delphi<-&&->java)回复于 2006-06-05 18:24:01 得分 0
ERR_INVALID_CHAR,ERR_INVALID_CHAR_COMMA,...
这些都是自己定义的错误代号,它代表一类错误。
dbgrid 设置了一个列,但这个列在 sql 语句是 没有的,运行时 dbgrid 就会用英文抛出一个异常信息说没有这个列等, 对于控件 内部 发出的异常,如何 捕捉 异常 信息 , 并 屏闭这些信息 换成 自己的信息???
就在你说的那步操作中用
try
except
end
捕获并根据错误代号显示你定义的报错信息。
Top




