?? 028.htm
字號:
lang="ZH-CN">異常。</font></p><p>EIntOverFlow<font face="宋體" lang="ZH-CN">異常類只有在編譯選擇框</font>Option|Project|Over_Flow_CheckOption<font face="宋體" lang="ZH-CN">選中時才產生。當關閉溢出檢查,則溢出后變量保留該類整數的最大范圍值。</font></p><p><font face="宋體" lang="ZH-CN">整數類型的范圍如下表?!?lt;/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<fontface="宋體" lang="ZH-CN">位</p></font><p>Integer -32768 .. 32767 <font face="宋體" lang="ZH-CN">有符號</font>16<fontface="宋體" lang="ZH-CN">位</p></font><p>Longint -2147483648 .. 2147483647 <font face="宋體" lang="ZH-CN">有符號</font>32<fontface="宋體" lang="ZH-CN">位</p></font><p>Byte 0 .. 255 <font face="宋體" lang="ZH-CN">無符號</font>8<fontface="宋體" lang="ZH-CN">位</p></font><p>Word 0 .. 65535 <font face="宋體" lang="ZH-CN">無符號</font>16<fontface="宋體" lang="ZH-CN">位</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p></font><p>12.1.1.4 <font face="宋體" lang="ZH-CN">浮點異常 </p><p> 浮點異常是在進行實數操作時產生的,它們都從一個</font>EMathError<fontface="宋體" lang="ZH-CN">類派生,但與整數異常相同,程序運行中引發(fā)的總是它的子類</font>EInvalidOp<fontface="宋體" lang="ZH-CN">、</font>EZeroDivide<font face="宋體" lang="ZH-CN">、</font>EOverFlow<fontface="宋體" lang="ZH-CN">、</font>EUnderFlow<font face="宋體" lang="ZH-CN">?!?lt;/p><p> 表</font>12.4<font face="宋體" lang="ZH-CN"> 浮點異常類及其引發(fā)原因</p><p>━━━━━━━━━━━━━━━━━━━━━━━━</p><p>異常類 引發(fā)原因</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">最常見的引發(fā)原因是沒有協處理器的機器遇到一個協處理器指令。由于在缺省情況下</font>Delphi<fontface="宋體" lang="ZH-CN">總是把浮點運算編譯為協處理器指令,因而在</font>386<fontface="宋體" lang="ZH-CN">以下微機上常常會碰到這個錯誤。此時只需要在單元的接口部分設置全局編譯指示{</font>$N-}<fontface="宋體" lang="ZH-CN">,選擇利用運行時間庫進行浮點運算,問題就可以解決了?! ?lt;/p><p> 各種類型的浮點數</font>(Real<font face="宋體" lang="ZH-CN">、</font>Single<fontface="宋體" lang="ZH-CN">、</font>Double<font face="宋體" lang="ZH-CN">、</font>Extended)<fontface="宋體" lang="ZH-CN">越界引起同樣的溢出異常。這同整數異常類是不同的?!?lt;/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">操作符把一個對象與另一類對象匹配失敗后引發(fā)。 </p></font><p>12.1.1.6 <font face="宋體" lang="ZH-CN">類型轉換異常</p><p> 類型轉換異常</font>EConvertError<font face="宋體" lang="ZH-CN">當試圖用轉換函數把數據從一種形式轉換為另一種形式時引發(fā),特別是當把一個字符串轉換為數值時引發(fā)。下面程序中的兩條執(zhí)行語句都將引發(fā)一個</font>EConvertError<fontface="宋體" 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">要注意并不是所有的類型轉換函數都會引發(fā)</font>EConvertError<fontface="宋體" lang="ZH-CN">異常。比如函數</font>Val<font face="宋體" lang="ZH-CN">當它無法完成字符串到數值的轉換時只把錯誤代碼返回。利用這一點我們在</font>(6.2)<fontface="宋體" lang="ZH-CN">節(jié)中實現了輸入的類型和范圍檢查。 </p></font><p>12.1.1.7 <font face="宋體" lang="ZH-CN">硬件異常</p><p> 硬件異常發(fā)生的情況有兩種:或者是處理器檢測到一個它不能處理的錯誤,或者是程序產生一個中斷試圖中止程序的執(zhí)行。硬件異常不能編譯進動態(tài)鏈接庫</font>(DLLs)<fontface="宋體" lang="ZH-CN">中,而只能在標準的應用中使用。</p><p> 硬件異常都是</font>EProcessor<font face="宋體" lang="ZH-CN">異常類的子類。但運行時間并不會引發(fā)一個</font>EProcessor<font face="宋體" lang="ZH-CN">異常?!?lt;/p><p> 表</font>12.5<font face="宋體" lang="ZH-CN"> 硬件異常類及其產生原因</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>異常類 引發(fā)原因</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 <fontface="宋體" lang="ZH-CN">往往意味著致命的錯誤。而</font>EBreakPoint<fontface="宋體" lang="ZH-CN">、</font>ESingleStep<font face="宋體" lang="ZH-CN">被</font>DelphiIDE<font face="宋體" lang="ZH-CN">的內置調試器處理。事實上前邊的五種硬件異常的響應和處理對開發(fā)者來說都是十分棘手的問題。 </p></font><p>12.1.2 <font face="宋體" lang="ZH-CN">對象異常類 </p><p> 所謂對象異常是指非部件的對象引發(fā)的異常。</font>Delphi<fontface="宋體" 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<fontface="宋體" lang="ZH-CN">、</font> EFOpenError<font face="宋體" lang="ZH-CN">、</font>EFilerError<fontface="宋體" lang="ZH-CN">、</font>EReadError<font face="宋體" lang="ZH-CN">、</font>EWriteError<fontface="宋體" 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> 流異常引發(fā)的原因如表</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>異常類 引發(fā)原因</p><p>─────────────────────────────────</p></font><p>EStreamError <font face="宋體" lang="ZH-CN">利用</font>LoadFromStream<fontface="宋體" lang="ZH-CN">方法讀一個流發(fā)生錯誤</p></font><p>EFCreateError <font face="宋體" lang="ZH-CN">創(chuàng)建文件時發(fā)生錯誤</p></font><p>EFOpenError <font face="宋體" lang="ZH-CN">打開文件時發(fā)生錯誤</p></font><p>EFilerError <font face="宋體" lang="ZH-CN">試圖再次登錄一個存在的對象</p></font><p>EReadError ReadBuffer<font face="宋體" lang="ZH-CN">方法不能讀取特定數目的字節(jié)</p></font><p>EWriteError WriteBuffer<font face="宋體" lang="ZH-CN">方法不能寫特定數目的字節(jié)</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">當打印發(fā)生錯誤時引發(fā)。它在</font>printers<fontface="宋體" lang="ZH-CN">庫單元中定義。例如你的應用程序試圖向一個不存在的打印機打印或由于某種原因打印工作無法送到打印機時,就會產生一個打印異常?!?lt;/p></font><p>12.1.2.3 <font face="宋體" lang="ZH-CN">圖形異常類 </p><p> 圖形異常類定義在</font>Graphic <font face="宋體" lang="ZH-CN">庫單元中,包括</font>EInvalidGraphic<fontface="宋體" lang="ZH-CN">和</font>EInvalidGraphicOperation<font face="宋體"lang="ZH-CN">兩類。</p><p> </font>EInvalidGraphic<font face="宋體" lang="ZH-CN">當應用程序試圖從一個并不包含合法的位圖、圖標、元文件或用戶自定義圖形類型的文件中裝入圖形時引發(fā)。例如下面的代碼: </p><p> </font>Image1.Picture.LoadFromFile('Readme.txt')<font face="宋體" lang="ZH-CN">; </p><p> 由于</font>Readme.txt<font face="宋體" lang="ZH-CN">并不包含一個合法的圖形,因而將引發(fā)一個</font>EInvalidGraphic<fontface="宋體" lang="ZH-CN">異常。</p><p> </font>EInvalidGraphicOperation<font face="宋體" lang="ZH-CN">當試圖對一個圖形進行非法操作時引發(fā)。例如試圖改變一個圖標的大小?!?lt;/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">引發(fā)一個圖形異常</font>}</p><p>...</p><p>12.1.2.4 <font face="宋體" lang="ZH-CN">字符串鏈表異?!?lt;/p><p> 字符串鏈表異常</font>EStringListError<font face="宋體" lang="ZH-CN">、</font>EListError<fontface="宋體" lang="ZH-CN">在用戶對字符串鏈表進行非法操作時引發(fā)。由于許多部件</font>(<fontface="宋體" lang="ZH-CN">如</font>TListBox,TMemo,TTabSet,<font face="宋體"lang="ZH-CN">…</font>)<font face="宋體" lang="ZH-CN">都有一個</font>TStrings<fontface="宋體" 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<fontface="宋體" 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">異常一般在如下兩種情況下引發(fā):</p><p> </font>1.<font face="宋體" lang="ZH-CN">當字符串鏈表的</font>Duplicates<fontface="宋體" 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<fontface="宋體" lang="ZH-CN">、</font>EComponentError<font face="宋體" lang="ZH-CN">、</font>EOutOfResource<font
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -