📄 028.htm
字号:
<p><font face="宋体" lang="ZH-CN">整数类型的范围如下表。 </p>
<p> 表</font>12.3 <font face="宋体" lang="ZH-CN">整数类型的范围</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>类型 范围 格式 </p>
<p> ───────────────────────────</p>
</font><p>Shortint -128 .. 127 <font face="宋体" lang="ZH-CN">有符号</font>8<font
face="宋体" lang="ZH-CN">位</p>
</font><p>Integer -32768 .. 32767 <font face="宋体" lang="ZH-CN">有符号</font>16<font
face="宋体" lang="ZH-CN">位</p>
</font><p>Longint -2147483648 .. 2147483647 <font face="宋体" lang="ZH-CN">有符号</font>32<font
face="宋体" lang="ZH-CN">位</p>
</font><p>Byte 0 .. 255 <font face="宋体" lang="ZH-CN">无符号</font>8<font
face="宋体" lang="ZH-CN">位</p>
</font><p>Word 0 .. 65535 <font face="宋体" lang="ZH-CN">无符号</font>16<font
face="宋体" lang="ZH-CN">位</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>12.1.1.4 <font face="宋体" lang="ZH-CN">浮点异常 </p>
<p> 浮点异常是在进行实数操作时产生的,它们都从一个</font>EMathError<font
face="宋体" lang="ZH-CN">类派生,但与整数异常相同,程序运行中引发的总是它的子类</font>EInvalidOp<font
face="宋体" lang="ZH-CN">、</font>EZeroDivide<font face="宋体" lang="ZH-CN">、</font>EOverFlow<font
face="宋体" lang="ZH-CN">、</font>EUnderFlow<font face="宋体" lang="ZH-CN">。 </p>
<p> 表</font>12.4<font face="宋体" lang="ZH-CN"> 浮点异常类及其引发原因</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>异常类 引发原因</p>
<p>────────────────────────</p>
</font><p>EInvalidOp <font face="宋体" lang="ZH-CN">处理器碰到一个未定义的指令</p>
</font><p>EZeroDivide <font face="宋体" lang="ZH-CN">试图被零除</p>
</font><p>EOverFlow <font face="宋体" lang="ZH-CN">浮点上溢</p>
</font><p>EUnderFlow <font face="宋体" lang="ZH-CN">浮点下溢</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p> </font>EInvalidOp<font face="宋体" lang="ZH-CN">最常见的引发原因是没有协处理器的机器遇到一个协处理器指令。由于在缺省情况下</font>Delphi<font
face="宋体" lang="ZH-CN">总是把浮点运算编译为协处理器指令,因而在</font>386<font
face="宋体" lang="ZH-CN">以下微机上常常会碰到这个错误。此时只需要在单元的接口部分设置全局编译指示{</font>$N-}<font
face="宋体" lang="ZH-CN">,选择利用运行时间库进行浮点运算,问题就可以解决了。 </p>
<p> 各种类型的浮点数</font>(Real<font face="宋体" lang="ZH-CN">、</font>Single<font
face="宋体" lang="ZH-CN">、</font>Double<font face="宋体" lang="ZH-CN">、</font>Extended)<font
face="宋体" lang="ZH-CN">越界引起同样的溢出异常。这同整数异常类是不同的。 </p>
</font><p>12.1.1.5 <font face="宋体" lang="ZH-CN">类型匹配异常</p>
<p> 类型匹配异常</font>EInvalidCast<font face="宋体" lang="ZH-CN">当试图用</font>As
<font face="宋体" lang="ZH-CN">操作符把一个对象与另一类对象匹配失败后引发。 </p>
</font><p>12.1.1.6 <font face="宋体" lang="ZH-CN">类型转换异常</p>
<p> 类型转换异常</font>EConvertError<font face="宋体" lang="ZH-CN">当试图用转换函数把数据从一种形式转换为另一种形式时引发,特别是当把一个字符串转换为数值时引发。下面程序中的两条执行语句都将引发一个</font>EConvertError<font
face="宋体" lang="ZH-CN">异常。</p>
</font><p>var</p>
<p>rl : Real;</p>
<p>int: Integer;</p>
<p>begin</p>
<p>rl := StrToFloat(' $140.48');</p>
<p>int := StrToInt(' 1,402 ');</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">要注意并不是所有的类型转换函数都会引发</font>EConvertError<font
face="宋体" lang="ZH-CN">异常。比如函数</font>Val<font face="宋体" lang="ZH-CN">当它无法完成字符串到数值的转换时只把错误代码返回。利用这一点我们在</font>(6.2)<font
face="宋体" lang="ZH-CN">节中实现了输入的类型和范围检查。 </p>
</font><p>12.1.1.7 <font face="宋体" lang="ZH-CN">硬件异常</p>
<p> 硬件异常发生的情况有两种:或者是处理器检测到一个它不能处理的错误,或者是程序产生一个中断试图中止程序的执行。硬件异常不能编译进动态链接库</font>(DLLs)<font
face="宋体" lang="ZH-CN">中,而只能在标准的应用中使用。</p>
<p> 硬件异常都是</font>EProcessor<font face="宋体" lang="ZH-CN">异常类的子类。但运行时间并不会引发一个</font>EProcessor
<font face="宋体" lang="ZH-CN">异常。 </p>
<p> 表</font>12.5<font face="宋体" lang="ZH-CN"> 硬件异常类及其产生原因</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>异常类 引发原因</p>
<p>─────────────────────────────────</p>
</font><p>Efault <font face="宋体" lang="ZH-CN">基本异常类。是其它异常类的父类</p>
</font><p>EGPFault <font face="宋体" lang="ZH-CN">一般保护错。通常由一个未</font>
<font face="宋体" lang="ZH-CN">初始化的指针或对象引起</p>
</font><p>EStackFault <font face="宋体" lang="ZH-CN">非法访问处理器的栈段</p>
</font><p>EPageFault Windows<font face="宋体" lang="ZH-CN">内存管理器不能正确使用交换文件</p>
</font><p>EInvalidOpCode <font face="宋体" lang="ZH-CN">处理器碰到一个未定义的指令。这通常意味着处理器</p>
<p>试图去操作非法数据或未初始化的内存</p>
</font><p>EBreakPoint <font face="宋体" lang="ZH-CN">应用程序产生一个断点中断</p>
</font><p>ESingleStep <font face="宋体" lang="ZH-CN">应用程序产生一个单步中断</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p> </font>EFault<font face="宋体" lang="ZH-CN">、</font>EGPFault <font
face="宋体" lang="ZH-CN">往往意味着致命的错误。而</font>EBreakPoint<font
face="宋体" lang="ZH-CN">、</font>ESingleStep<font face="宋体" lang="ZH-CN">被</font>Delphi
IDE<font face="宋体" lang="ZH-CN">的内置调试器处理。事实上前边的五种硬件异常的响应和处理对开发者来说都是十分棘手的问题。 </p>
</font><p>12.1.2 <font face="宋体" lang="ZH-CN">对象异常类 </p>
<p> 所谓对象异常是指非部件的对象引发的异常。</font>Delphi<font
face="宋体" lang="ZH-CN">定义的对象异常包括流异常、打印异常、图形异常、字符串链表异常等。 </p>
</font><p>12.1.2.1 <font face="宋体" lang="ZH-CN">流异常类 </p>
<p> 流异常类包括</font>EStreamError<font face="宋体" lang="ZH-CN">、</font>EFCreateError<font
face="宋体" lang="ZH-CN">、</font> EFOpenError<font face="宋体" lang="ZH-CN">、</font>EFilerError<font
face="宋体" lang="ZH-CN">、</font>EReadError<font face="宋体" lang="ZH-CN">、</font>EWriteError<font
face="宋体" lang="ZH-CN">、</font>EClassNotFound<font face="宋体" lang="ZH-CN">。它们的结构关系如下: </p>
</font><p>EStreamError</p>
<p>|---------- EFCreateError</p>
<p>|---------- EFOpenError</p>
<p>|---------- EFilerError</p>
<p>|--------- EReadError</p>
<p>|--------- EWriteError</p>
<p>|--------- EClassNotFound</p>
<font face="宋体" lang="ZH-CN"><p> 图</font>12.1 <font face="宋体"
lang="ZH-CN">流异常结构图 </p>
</font><p><font face="宋体" lang="ZH-CN">流异常在</font>Classes<font face="宋体"
lang="ZH-CN">库单元中定义。</p>
<p> 流异常引发的原因如表</font>12.6<font face="宋体" lang="ZH-CN">。</font></p>
<p><font face="宋体" lang="ZH-CN">表</font>12.6<font face="宋体" lang="ZH-CN"> 流异常类及其产生原因</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>异常类 引发原因</p>
<p>─────────────────────────────────</p>
</font><p>EStreamError <font face="宋体" lang="ZH-CN">利用</font>LoadFromStream<font
face="宋体" lang="ZH-CN">方法读一个流发生错误</p>
</font><p>EFCreateError <font face="宋体" lang="ZH-CN">创建文件时发生错误</p>
</font><p>EFOpenError <font face="宋体" lang="ZH-CN">打开文件时发生错误</p>
</font><p>EFilerError <font face="宋体" lang="ZH-CN">试图再次登录一个存在的对象</p>
</font><p>EReadError ReadBuffer<font face="宋体" lang="ZH-CN">方法不能读取特定数目的字节</p>
</font><p>EWriteError WriteBuffer<font face="宋体" lang="ZH-CN">方法不能写特定数目的字节</p>
</font><p>EClassNotFound <font face="宋体" lang="ZH-CN">窗口上的部件被从窗口的类型定义中删除</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
</font><p>12.1.2.2 <font face="宋体" lang="ZH-CN">打印异常类 </p>
<p> 打印异常类</font>EPrinter<font face="宋体" lang="ZH-CN">当打印发生错误时引发。它在</font>printers<font
face="宋体" lang="ZH-CN">库单元中定义。例如你的应用程序试图向一个不存在的打印机打印或由于某种原因打印工作无法送到打印机时,就会产生一个打印异常。 </p>
</font><p>12.1.2.3 <font face="宋体" lang="ZH-CN">图形异常类 </p>
<p> 图形异常类定义在</font>Graphic <font face="宋体" lang="ZH-CN">库单元中,包括</font>EInvalidGraphic<font
face="宋体" lang="ZH-CN">和</font>EInvalidGraphicOperation<font face="宋体"
lang="ZH-CN">两类。</p>
<p> </font>EInvalidGraphic<font face="宋体" lang="ZH-CN">当应用程序试图从一个并不包含合法的位图、图标、元文件或用户自定义图形类型的文件中装入图形时引发。例如下面的代码: </p>
<p> </font>Image1.Picture.LoadFromFile('Readme.txt')<font face="宋体" lang="ZH-CN">; </p>
<p> 由于</font>Readme.txt<font face="宋体" lang="ZH-CN">并不包含一个合法的图形,因而将引发一个</font>EInvalidGraphic<font
face="宋体" lang="ZH-CN">异常。</p>
<p> </font>EInvalidGraphicOperation<font face="宋体" lang="ZH-CN">当试图对一个图形进行非法操作时引发。例如试图改变一个图标的大小。 </p>
</font><p>var</p>
<p>AnIcon: TIcon;</p>
<p>begin</p>
<p>AnIcon := TIcon.Create;</p>
<p>AnIcon.LoadFromFile('C:\WINDOWS\DIRECTRY.ICO');</p>
<p>AnIcon.Width := 100; { <font face="宋体" lang="ZH-CN">引发一个图形异常</font>
}</p>
<p>...</p>
<p>12.1.2.4 <font face="宋体" lang="ZH-CN">字符串链表异常 </p>
<p> 字符串链表异常</font>EStringListError<font face="宋体" lang="ZH-CN">、</font>EListError<font
face="宋体" lang="ZH-CN">在用户对字符串链表进行非法操作时引发。由于许多部件</font>(<font
face="宋体" lang="ZH-CN">如</font>TListBox,TMemo,TTabSet,<font face="宋体"
lang="ZH-CN">…</font>)<font face="宋体" lang="ZH-CN">都有一个</font>TStrings<font
face="宋体" lang="ZH-CN">类的重要属性,因而字符串链表异常在部件操作编程中非常有用。</p>
<p> </font>EStringListError<font face="宋体" lang="ZH-CN">异常一般在字符串链表越界时产生。例如对如下初始化的列表框: </p>
</font><p>ListBox1.Items.Add('First item'); </p>
<p>ListBox1.Items.Add('Second item'); </p>
<p>ListBox1.Items.Add('Third item'); </p>
<font face="宋体" lang="ZH-CN"><p> 则以下操作都会引起</font>EStringListError<font
face="宋体" lang="ZH-CN">异常: </p>
</font><p>ListBox1.Item[3] := ' Not Exist';</p>
<p>str := ListBox1.Item [3];</p>
<font face="宋体" lang="ZH-CN"><p> </font>EListError<font face="宋体"
lang="ZH-CN">异常一般在如下两种情况下引发:</p>
<p> </font>1.<font face="宋体" lang="ZH-CN">当字符串链表的</font>Duplicates<font
face="宋体" lang="ZH-CN">属性设置为</font>dupError<font face="宋体" lang="ZH-CN">时,应用程序试图加入一个重复的字符串;</p>
<p> </font>2.<font face="宋体" lang="ZH-CN">试图往一个排序的字符串链表中插入一个字符串。 </p>
</font><p>12.1.3 <font face="宋体" lang="ZH-CN">部件异常类 </p>
</font><p>12.1.3.1 <font face="宋体" lang="ZH-CN">通用部件异常类 </p>
<p> 通用部件异常类常用的有三个:</font>EInvalidOperation<font
face="宋体" lang="ZH-CN">、</font>EComponentError<font face="宋体" lang="ZH-CN">、</font>EOutOfResource<font
face="宋体" lang="ZH-CN">。其中</font>EInvalidOperation<font face="宋体"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -