熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:異常處理與程序調試(一)[3]

2022-06-13   來源: Delphi編程 

   對象異常類

  所謂對象異常是指非部件的對象引發的異常Delphi定義的對象異常包括流異常打印異常圖形異常字符串鏈表異常等

   流異常類

  流異常類包括EStreamErrorEFCreateError EFOpenErrorEFilerErrorEReadErrorEWriteErrorEClassNotFound它們的結構關系如下

  EStreamError

  | EFCreateError

  | EFOpenError

  | EFilerError

  | EReadError

  | EWriteError

  | EClassNotFound

  流異常在Classes庫單元中定義

  流異常引發的原因如表

  表  流異常類及其產生原因

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  異常類 引發原因

  ─────────────────────────────────

  EStreamError 利用LoadFromStream方法讀一個流發生錯誤

  EFCreateError 創建文件時發生錯誤

  EFOpenError 打開文件時發生錯誤

  EFilerError 試圖再次登錄一個存在的對象

  EReadError ReadBuffer方法不能讀取特定數目的字節

  EWriteError WriteBuffer方法不能寫特定數目的字節

  EClassNotFound 窗口上的部件被從窗口的類型定義中刪除

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   打印異常類

  打印異常類EPrinter當打印發生錯誤時引發它在printers庫單元中定義例如你的應用程序試圖向一個不存在的打印機打印或由於某種原因打印工作無法送到打印機時就會產生一個打印異常

   圖形異常類

  圖形異常類定義在Graphic 庫單元中包括EInvalidGraphic和EInvalidGraphicOperation兩類

  EInvalidGraphic當應用程序試圖從一個並不包含合法的位圖圖標元文件或用戶自定義圖形類型的文件中裝入圖形時引發例如下面的代碼

  ImagePictureLoadFromFile(Readmetxt

  由於Readmetxt並不包含一個合法的圖形因而將引發一個EInvalidGraphic異常

  EInvalidGraphicOperation當試圖對一個圖形進行非法操作時引發例如試圖改變一個圖標的大小

  var

  AnIcon: TIcon;

  begin

  AnIcon := TIconCreate;

  AnIconLoadFromFile(C:\WINDOWS\DIRECTRYICO

  AnIconWidth := ; { 引發一個圖形異常 }

  …

   字符串鏈表異常

  字符串鏈表異常EStringListErrorEListError在用戶對字符串鏈表進行非法操作時引發由於許多部件(如TListBoxTMemoTTabSet…)都有一個TStrings類的重要屬性因而字符串鏈表異常在部件操作編程中非常有用

  EStringListError異常一般在字符串鏈表越界時產生例如對如下初始化的列表框

  ListBoxItemsAdd(First item

  ListBoxItemsAdd(Second item

  ListBoxItemsAdd(Third item

  則以下操作都會引起EStringListError異常

  ListBoxItem[] := Not Exist;

  str := ListBoxItem [];

  EListError異常一般在如下兩種情況下引發

  當字符串鏈表的Duplicates屬性設置為dupError時應用程序試圖加入一個重復的字符串

  試圖往一個排序的字符串鏈表中插入一個字符串

   部件異常類

   通用部件異常類

  通用部件異常類常用的有三個EInvalidOperationEComponentErrorEOutOfResource其中EInvalidOperationEOutOfResource在Controls單元中定義EComponentError在Classes單元中定義

  非法操作異常 EInvalidOperation

  EInvalidOperation 引發的原因可能有

  ● 應用程序試圖對一個Parent屬性為nil的部件進行一些需要Windows句柄的操作

  ● 試圖對一個窗口進行拖放操作

  ● 操作違反了部件屬性間內置的相互關系等

  例如ScrollBarGauge等部件要求Max屬性大於等於Min屬性因而下面的語句

  ScrollBarMax := ScrollBarMin;

  將引發一個EInvalidOperation異常

  部件異常EComponentError

  引發該異常的原因可能有

  ● 在Register過程之外試圖登錄一個部件(常用於自定義部件開發中)

  ● 應用程序在運行中改變了一個部件的名稱並使該部件與另一個部件重名

  ● 一個部件的名稱改變為一個Object Pascal非法的標識符

  ● 動態生成一個部件與已存在的另一部件重名

  資源耗盡異常EOutOfResource

  當應用程序試圖創建一個Windows句柄而Windows 卻沒有多余的句柄分配時引發該異常

   專用部件異常類

  許多部件都定義了相應的部件異常類但並不是有關部件的任何錯誤都會引發相應的異常類許多情況下它們將引發一個運行時間異常或對象異常

  下面列出幾個典型的部件異常類

  EMenuError

  非法的菜單操作例如試圖刪除一個不存在的菜單項這一異常類在Menus庫單元中定義

  EInvalidGridOpertion

  非法的網格操作比如試圖引用一個不存在的網格單元這一異常類在Grids庫單元中定義

  EDDEError

  DDE異常比如應用程序找不到特定的服務器或會話或者一個聯接意外中止這一異常類在DDEMan庫單元中定義

  EDatabaseErrorEReportError

  數據庫異常(EDatabaseError)和報表異常(EReportError) 在進行數據庫和報表操作出現錯誤時引發有關數據庫的問題請讀者參閱本書第二編

   小結

  在這一節中重點介紹了Delphi提供的異常類體系我們力求給讀者一個清晰全面的印象使讀者能在自己的程序開發中實際使用它們為便於理解我們也提供了一些簡單的說明性示例雖然在具體的使用中讀者還可能會碰到許多問題但意識到應該用異常類來增強程序的健壯性卻是程序設計水平走上新台階的標志

   異常保護

  確保回收分配的資源是程序健壯性的一個關鍵但缺省情況下異常發生時程序會在出錯點自動退出當前模塊因此需要一種特殊的機制來確保即使在異常發生的情況下釋放資源的語句仍能被執行而Delphi的異常處理正提供了這種機制

   需要保護的資源

  一般說來需要保護的資源包括

  ● 文件

  ● 內存

  ● Windows資源

  ● 對象

  比如下面一段程序就會造成K內存資源的丟失

  var

  APointer : Pointer ;

  AInt ADiv: Integer ;

  begin

  ADiv := ;

  GetMem ( APointer

  AInt := div ADiv ;

  FreeMem ( Apointer

  end;

  由於程序從異常發生點退出從而FreeMem永遠沒有執行的機會

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25193.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.