12.1.2 對象異常類
所謂對象異常是指非部件的對象引發的異常。Delphi定義的對象異常包括流異常、打印異常、圖形異常、字符串鏈表異常等。
12.1.2.1 流異常類
流異常類包括EStreamError、EFCreateError、 EFOpenError、EFilerError、EReadError、EWriteError、EClassNotFound。它們的結構關系如下:
EStreamError
|---------- EFCreateError
|---------- EFOpenError
|---------- EFilerError
|--------- EReadError
|--------- EWriteError
|--------- EClassNotFound
圖12.1 流異常結構圖
流異常在Classes庫單元中定義。
流異常引發的原因如表12.6。
表12.6 流異常類及其產生原因
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發原因
─────────────────────────────────
EStreamError 利用LoadFromStream方法讀一個流發生錯誤
EFCreateError 創建文件時發生錯誤
EFOpenError 打開文件時發生錯誤
EFilerError 試圖再次登錄一個存在的對象
EReadError ReadBuffer方法不能讀取特定數目的字節
EWriteError WriteBuffer方法不能寫特定數目的字節
EClassNotFound 窗口上的部件被從窗口的類型定義中刪除
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12.1.2.2 打印異常類
打印異常類EPrinter當打印發生錯誤時引發。它在printers庫單元中定義。例如你的應用程序試圖向一個不存在的打印機打印或由於某種原因打印工作無法送到打印機時,就會產生一個打印異常。
12.1.2.3 圖形異常類
圖形異常類定義在Graphic 庫單元中,包括EInvalidGraphic和EInvalidGraphicOperation兩類。
EInvalidGraphic當應用程序試圖從一個並不包含合法的位圖、圖標、元文件或用戶自定義圖形類型的文件中裝入圖形時引發。例如下面的代碼:
Image1.Picture.LoadFromFile('Readme.txt');
由於Readme.txt並不包含一個合法的圖形,因而將引發一個EInvalidGraphic異常。
EInvalidGraphicOperation當試圖對一個圖形進行非法操作時引發。例如試圖改變一個圖標的大小。
var
AnIcon: TIcon;
begin
AnIcon := TIcon.Create;
AnIcon.LoadFromFile('C:\WINDOWS\DIRECTRY.ICO');
AnIcon.Width := 100; { 引發一個圖形異常 }
...
12.1.2.4 字符串鏈表異常
字符串鏈表異常EStringListError、EListError在用戶對字符串鏈表進行非法操作時引發。由於許多部件(如TListBox,TMemo,TTabSet,…)都有一個TStrings類的重要屬性,因而字符串鏈表異常在部件操作編程中非常有用。
EStringListError異常一般在字符串鏈表越界時產生。例如對如下初始化的列表框:
ListBox1.Items.Add('First item');
ListBox1.Items.Add('Second item');
ListBox1.Items.Add('Third item');
則以下操作都會引起EStringListError異常:
ListBox1.Item[3] := ' Not Exist';
str := ListBox1.Item [3];
EListError異常一般在如下兩種情況下引發:
1.當字符串鏈表的Duplicates屬性設置為dupError時,應用程序試圖加入一個重復的字符串;
2.試圖往一個排序的字符串鏈表中插入一個字符串。