各位老大,小弟写了一段代码.不知道为什么无法截获异常.请各位指点一下.代码如下:
var
SmallNumber:shortint;
X,Y:Integer;
begin
try
X:=100;
Y:=75;
SmallNumber:=x*y;
except
on ERangeError do showmessage('数据越界错误!');
end;
end;
整数异常
整数异常都是从一个EIntError类派生的,但程序运行中引发的总是它的子类:EDivByZero,ERangeError,EIntOverFlow。
整数异常及其产生原因
异常类 引发原因
EDivByZero 试图被零除
ERangeError 整数表达式越界
EIntOverFlow 整数操作溢出
━━━━━━━━━━━━━━━━━━━━━━
ERangeError当一个整数表达式的值超过为一个特定整数类型分配的范围时引发。比如下面一段代码将引发一个ERangeError异常。
var
SmallNumber: ShortInt;
X , Y: Integer;
begin
X := 100;
Y := 75;
SmallNumber := X * Y;
end;
特定整数类型包括ShortInt、Byte以及与整数兼容的枚举类型、布尔类型等。例如:
type
THazard = ( Safety , Marginal , Critical , Catastrophic );
var
Haz: THazard;
Item: Integer;
begin
Item:= 4;
Haz:= THazard ( Item );
end;
由于枚举数越界而引发一个ERangeError异常。
数组元素越界也会引发一个ERangeError异常,如:
var
Values: array[1..10] of Integer;
i: Integer;
begin
for i := 1 to 11 do
Values[i] := i;
end;
ERangeError异常只有当类型检查打开时才会引发。这可以在代码中包含{$R+} 编译指示或设置IDE Option|Project的Range_Checking Option选择框。
EIntOverFlow异常类在Integer、Word、Longint三种整数类型越界时引发。如:
var
I : Integer;
a,b,c : Word;
begin
a := 10;
b := 20;
c := 1;
for I := 0 to 100 do
begin
c := a*b*c;
end;
end;
引发一个EIntOverFlow异常。
EIntOverFlow异常类只有在编译选择框Option|Project|Over_Flow_Check Option选中时才产生。当关闭溢出检查,则溢出后变量保留该类整数的最大范围值。
你按照上面红色的区域设置,看看行不行.
[此贴子已经被作者于2006-4-5 2:33:58编辑过]