所謂對象異常是指非部件的對象引發的異常
流異常類包括EStreamError
EStreamError
|
|
|
|
|
|
流異常在Classes庫單元中定義
流異常引發的原因如表
表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發原因
─────────────────────────────────
EStreamError 利用LoadFromStream方法讀一個流發生錯誤
EFCreateError 創建文件時發生錯誤
EFOpenError 打開文件時發生錯誤
EFilerError 試圖再次登錄一個存在的對象
EReadError ReadBuffer方法不能讀取特定數目的字節
EWriteError WriteBuffer方法不能寫特定數目的字節
EClassNotFound 窗口上的部件被從窗口的類型定義中刪除
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
打印異常類EPrinter當打印發生錯誤時引發
圖形異常類定義在Graphic 庫單元中
EInvalidGraphic當應用程序試圖從一個並不包含合法的位圖
Image
由於Readme
EInvalidGraphicOperation當試圖對一個圖形進行非法操作時引發
var
AnIcon: TIcon;
begin
AnIcon := TIcon
AnIcon
AnIcon
…
字符串鏈表異常EStringListError
EStringListError異常一般在字符串鏈表越界時產生
ListBox
ListBox
ListBox
則以下操作都會引起EStringListError異常
ListBox
str := ListBox
EListError異常一般在如下兩種情況下引發
通用部件異常類常用的有三個
EInvalidOperation 引發的原因可能有
● 應用程序試圖對一個Parent屬性為nil的部件進行一些需要Windows句柄的操作
● 試圖對一個窗口進行拖放操作
● 操作違反了部件屬性間內置的相互關系等
例如
ScrollBar
將引發一個EInvalidOperation異常
引發該異常的原因可能有
● 在Register過程之外試圖登錄一個部件(常用於自定義部件開發中)
● 應用程序在運行中改變了一個部件的名稱並使該部件與另一個部件重名
● 一個部件的名稱改變為一個Object Pascal非法的標識符
● 動態生成一個部件與已存在的另一部件重名
當應用程序試圖創建一個Windows句柄而Windows 卻沒有多余的句柄分配時引發該異常
許多部件都定義了相應的部件異常類
下面列出幾個典型的部件異常類
非法的菜單操作
非法的網格操作
DDE異常
數據庫異常(EDatabaseError)和報表異常(EReportError) 在進行數據庫和報表操作出現錯誤時引發
在這一節中重點介紹了Delphi提供的異常類體系
確保回收分配的資源是程序健壯性的一個關鍵
一般說來需要保護的資源包括
● 文件
● 內存
● Windows資源
● 對象
比如下面一段程序就會造成
var
APointer : Pointer ;
AInt
begin
ADiv :=
GetMem ( APointer
AInt :=
FreeMem ( Apointer
end;
由於程序從異常發生點退出從而FreeMem永遠沒有執行的機會
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25193.html