Delphi異常處理try except語句和try_第1頁
Delphi異常處理try except語句和try_第2頁
Delphi異常處理try except語句和try_第3頁
Delphi異常處理try except語句和try_第4頁
Delphi異常處理try except語句和try_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、-作者xxxx-日期xxxxDelphi異常處理try except語句和try【精品文檔】Delphi異常處理try except語句和try finally語句用法以及區(qū)別 一、異常的來源在Delphi的應(yīng)用程序中,下列的情況都比較有可能產(chǎn)生異常。(1)文件處理(2)內(nèi)存分配(3)Windows資源(4)運(yùn)行時創(chuàng)建對象和窗體(5)硬件和操作系統(tǒng)沖突二、異常的處理(1)tryexceptend;在try體內(nèi)的代碼發(fā)生異常時,系統(tǒng)將轉(zhuǎn)向except部分進(jìn)行異常的處理。這是Delphi處理異常的最基本的方式之一。(2)tryfinallyend;這種異常處理結(jié)構(gòu)一般用于保護(hù)Windows的資源分

2、配等方面,它確保了無論try體內(nèi)的代碼是否發(fā)生異常,都需要由系統(tǒng)進(jìn)行最后的統(tǒng)一處理的一些Windows對象的正確處理。和tryexceptend不同,該結(jié)構(gòu)的finally部分總被執(zhí)行。(3)不存在tryexceptfinallyend結(jié)構(gòu)來既處理異常,又保護(hù)資源分配的結(jié)構(gòu),但是,tryexceptend結(jié)構(gòu)允許嵌套到tryfinallyend結(jié)構(gòu)中,從而實現(xiàn)既處理異常,又保護(hù)資源的分配。三、異常的精確處理(1)定義一個異常。在Delphi中,每個異常都是Exception1類的一個派生類2。因此,定義一個異常就是定義一個Exception類的派生類。type EMyException = c

3、lass(Exception);當(dāng)然,基類可以是Exception或者Exception的任何一個任何層次的派生類。(2)在程序中拋出一個異常。根據(jù)不同的情況拋出異常是使用異常的最基本的模式。在Delphi中,由raise語句來實現(xiàn)。(3)在tryexceptend中更加精確的捕捉異常。使用on E:異常類 do結(jié)構(gòu)可以在do體內(nèi)處理特定異常類所拋出的異常。四、異常的調(diào)試在Delphi IDE中,解除“Debugger Options”(可以使用菜單ToolsDebugger Options進(jìn)行訪問)中的Integrated Debugging復(fù)選框的勾選狀態(tài)可以進(jìn)行異常的調(diào)試。五、異常的補(bǔ)充

4、說明(1)每一段程序都有可能產(chǎn)生錯誤!這是軟件業(yè)的一個不容置疑的現(xiàn)象和規(guī)律。事實上,傳統(tǒng)的ifelse結(jié)構(gòu)完全可以解決所有的錯誤,使用Exception機(jī)制也沒能夠回避在最原始的層次,通過遍歷可能的情況來產(chǎn)生異常的做法,那么,為什么還要異常機(jī)制?答案很清楚:異常提供了一種更加靈活和開放的方式,使得后來的編程者可以來根據(jù)實際的情況處理這種錯誤,而不是使用預(yù)先設(shè)定好的處理結(jié)果。Delphi7異常處理了解什么是異常和Delphi7中提供的異常類掌握Delphi7環(huán)境下自定義異常的方法和異常處理的語法結(jié)構(gòu)與實現(xiàn).異常:理解為一種特殊的事件,該事件發(fā)生時,程序的正常執(zhí)行將被打斷.由程序?qū)е碌牟徽G闆r是

5、錯誤而不是異常,程序錯誤與異常不是相同的概念.異常是為方便用戶報告錯誤并處理錯誤而創(chuàng)建的機(jī)制,一般是由操作系統(tǒng)完成的.運(yùn)行期錯誤處理軟件開發(fā)過程中,程序員必須提供適度的方式來處理不可避免的錯誤.一般方法如下:1 傳統(tǒng)方法2 使用異常進(jìn)行錯誤處理傳統(tǒng)方法在Pascal早期版本中,程序員必須借助編譯器開關(guān)和狀態(tài)變量去檢測和處理存在的錯誤.$I-此編譯器指令關(guān)閉I/O檢測Assign(InFile,InputName);Reset(InFile);$I+此編譯器指令恢復(fù)I/O檢測If IOResult0 then錯誤處理代碼;使用異常進(jìn)行錯誤處理結(jié)構(gòu)化異常處理是Delphi語言內(nèi)建的特性.為我們處理

6、異常提供了方便.處理異常有兩方面:1 異常處理可確保適當(dāng)?shù)鼗謴?fù)在應(yīng)用程序中分配或改變的任何資源.2 結(jié)構(gòu)化異常處理為開發(fā)人員提供了一種一致的處理各種類型運(yùn)行期錯誤的方式Delphi7異常處理機(jī)制異常處理的基本思想是通過提供規(guī)范方式處理軟,硬件錯誤的能力,使程序更加健壯.異常處理可以將處理錯誤的代碼與正常的邏輯處理代碼相分離.”預(yù)警”對話框,以指明應(yīng)用程序?qū)⒁a(chǎn)生異常.異常處理機(jī)制是一種程序設(shè)計安全策略,它是建立在保護(hù)塊思想上,通過try和end語句塊對代碼的封裝確保在程序發(fā)生異常時,程序能夠正常運(yùn)行或釋放所占用的資源.Delphi7異常處理機(jī)制傳統(tǒng)程序設(shè)計中,用如下的偽代碼方法來檢查和處理程序

7、錯誤:執(zhí)行一個任務(wù)If 前一個任務(wù)未能正確執(zhí)行執(zhí)行錯誤處理執(zhí)行下一個任務(wù)If 前一個任務(wù)未能正確執(zhí)行執(zhí)行錯誤處理Delphi7異常處理機(jī)制例;tryAge := StrToInt(Edit1.Text);ShowMessage(Format(生于%d年, YearOf(Now) - Age);excepton EConvertError doshowmessage(輸入編輯框的不是一個有效的數(shù)字!);on ERangeError doshowmessage(輸入編輯框的年齡值太大!);end; 異常類的基類都是Exception類.Delphi7內(nèi)置了大量的異常類,用戶也可以通過Excepti

8、on類自定義異常類.記住異常類的要點:1 異常類是響應(yīng)不同異?,F(xiàn)象的入口.2 熟悉異常類的層次結(jié)構(gòu).Exception異常類Exception是所有異常類的基類,它并不是以T開頭,而是以E開頭,它的派生類也是以E開頭的.Exception類定義于SysUtils單元中.Exception類最常用的方法是Create方法:Constructor Create(const Msg:string);(我自己創(chuàng)建的異常!);該方法用于創(chuàng)建一個異常類的實例,也可以顯示錯誤信息,也可直接用這個方法提交一個異常raise (我拋出的異常!);例:tryraise (我拋出的異常!);excepton E:

9、Exception doshowmessage(異常類名稱: + + #13#10 + 異常信息: + );end;Delphi7內(nèi)置的異常類Delphi7根據(jù)異?,F(xiàn)象的類型定義了相應(yīng)的異常類,這些異常類又稱為Delphi7內(nèi)置的異常類.具體分為運(yùn)行時庫異常類,對象異常類和組件異常類三大類.運(yùn)行時庫異常類(RTL)運(yùn)行時庫異常類可分為以下幾種:1 整數(shù)計算異常 2 浮點計算異常 3 硬件異常 4 堆異常 5 輸入輸出異常(I/O異常) 6 字符轉(zhuǎn)換異常 7 類型轉(zhuǎn)換異常 8 啞異常整數(shù)計算異常EIntError 整數(shù)計算異常(基類)EDivByZero 整數(shù)除0溢處EIntOverFlow 整

10、數(shù)溢出ERangeError 整數(shù)越界浮點計算異常EMathError 浮點計算異常(基類)EInvalidOp 無效浮點操作指令Eoverflow 浮點操作上溢Eunderflow 浮點操作下溢EZeroDivide 浮點計算除0硬件異常EProcessorException 硬件異常(基類)ESingleStep 應(yīng)用程序產(chǎn)生單步中斷Ebreakpoint 應(yīng)用程序產(chǎn)生斷點中斷Efault 故障(繼承EProcessorException,也是基類)EStackFault 對處理器棧段的非法訪問EPageFault 內(nèi)存管理器無法正確使用交換文件EGPFault 保護(hù)性錯誤,一般由未初始化

11、指針或?qū)ο笤斐蒃InvalidOpCode 處理器遇到未定義指令堆異常和(I/O異常)堆異常:EOutOfMemory 堆中沒有足夠的內(nèi)存完成操作EInvalidPointer 試圖訪問一個堆外的指針(I/O異常)EInOutError DOS輸入/輸出錯誤字符轉(zhuǎn)換/類型轉(zhuǎn)換異常和啞異常字符轉(zhuǎn)換異常EConvertError 數(shù)字到字符串或字符串到數(shù)字轉(zhuǎn)換錯誤類型轉(zhuǎn)換異常EInvalidCast 類型轉(zhuǎn)換異常啞異常EAbort 調(diào)用Abort產(chǎn)生,不顯示錯誤提示框?qū)ο螽惓n悓ο螽惓n愂轻槍Ψ墙M件對象引發(fā)的異常而定義的.對象異常類包括:1 流異常類2 打印異常類3 圖形異常類4 字符串鏈表異常類

12、流異常類流異常是指在程序中進(jìn)行與流相關(guān)的基類是EStreamError,其他流異常類都直接或間接從它派生.派生關(guān)系見書48頁圖打印異常打印異常是由于應(yīng)用程序向不存在的打印機(jī)發(fā)送打印命令或由于某種原因打印工作無法送到打印機(jī)時引發(fā)的.打印異常類為Eprinter,定義于Printers單元圖形異常圖形異常主要包括EInvalidGraphic和EInvalidGraphicOperation兩個類均定義于Graphics單元EInvalidGraphic異常滿足下列情況之一時引發(fā):當(dāng)應(yīng)用程序試圖向一個并不包含合法的位圖,圖象,元文件或用戶自定義圖形類型的文件中裝入圖象時.當(dāng)應(yīng)用程序試圖裝入不可識別

13、擴(kuò)展名的文件時當(dāng)圖象與LoadFromClipboardFormat或SaveToClipboardFormat中的格式不匹配時.當(dāng)應(yīng)用程序試圖將圖象的PixelFormat設(shè)為不支持的值EInvalidGraphicOperation異常在滿足下列條件之一時發(fā)生:應(yīng)用程序訪問圖象中不存在的掃描線時.應(yīng)用程序不能成功寫入圖象時.應(yīng)用程序在畫布未處于有效狀態(tài)時進(jìn)行繪制.應(yīng)用程序裝入未知或不支持的圖象格式時.應(yīng)用程序?qū)D象的PixelFormat設(shè)為不支持的值時不能分配該操作的句柄時.字符串鏈表異常字符串鏈表異常是由于用戶對字符串鏈表進(jìn)行非法操作時引發(fā)的.包括EStringListError,EL

14、istErrorTstrings抽象類的屬性(如Tiistbox組件的Items屬性等),因而字符串鏈表異常在組件編程中很重要.EStringListErrorEListError異常通常在以下情況下發(fā)生:當(dāng)索引項超出鏈表范圍時當(dāng)字符串鏈表的Duplicates屬性設(shè)置為dupError同時應(yīng)用程序試圖加入一個重復(fù)的字符串時.當(dāng)向已排序的字符串鏈表中插入字符串時.組件異常類組件異常類用于響應(yīng)組件異常,組件異常是由于對VCL組件進(jìn)行操作時,違反了組件的使用規(guī)則及其特征而引發(fā)的,可分為兩大類:通用組件異常、專用組件異常、通用組件異常。常見的有非法操作異常,組件異常和資源不足異常三種類型,對應(yīng)于EI

15、nvalidOpetation,EComponentError和EOutOfResource異常類.引發(fā)非法操作異常的原因有:應(yīng)用程序試圖對Parent屬性為nil的組件進(jìn)行一些需要窗口句柄的操作.試圖對窗體拖放操作.引發(fā)組件異常的原因有:Delphi不能注冊某個組件應(yīng)用程序不能重命名某個組件資源不足異常被引發(fā)是由于當(dāng)應(yīng)用程序試圖創(chuàng)建窗口句柄而操作系統(tǒng)沒有多余的句柄可分配專用組件異常:許多組件都定義了相應(yīng)的組件異常類.列出幾個典型的組件異常類:EMenuErrorMemus單元EInvalidGridOperationEDatabaseError異常.數(shù)據(jù)庫異常是由于對數(shù)據(jù)庫的非法操作引起的.

16、用戶自定義異常類創(chuàng)建用戶自定義異常類的方法拋出自定義異常用戶自定義異常類與內(nèi)置異常類的區(qū)別異常類對象與其他類對象的區(qū)別創(chuàng)建用戶自定義異常類的方法選擇Exception作為基類,按照定義類的一般方法,建立自定義的異常類就可以了.如:typeEMyException = class(Exception)/需要定義屬性或方法時,寫在此處即可end;拋出自定義異常Delphi不會管理用戶自定義異常的拋出,程序員必須自己拋出自己創(chuàng)建的異常.用raise語句可拋出異常:raise (My Exception);用戶自定義異常類與內(nèi)置異常類的區(qū)別Delphi不會自動響應(yīng)用戶自定義的異常類,所以用戶自定義的異

17、常類需要使用raise語句拋出,而內(nèi)置異常類與運(yùn)行期真實的異常現(xiàn)象相對應(yīng),當(dāng)異常發(fā)生時,操作系統(tǒng)會捕捉到此異常,通知Delphi去響應(yīng).異常類對象與其他類對象的區(qū)別異常類對象創(chuàng)建后,不需要由用戶釋放它,當(dāng)異常處理之后,系統(tǒng)會自動調(diào)用析構(gòu)函數(shù)釋放異常類對象.而其他類需要由用戶來釋放.Delphi7的異常處理結(jié)構(gòu)tryfinally 語句塊Tryexcept語句塊使用raise拋出異常tryfinally 語句塊tryfinally 語句塊是用于資源保護(hù)和恢復(fù)系統(tǒng)狀態(tài),不管try部分的操作是否有異常發(fā)生,finally部分的操作都要進(jìn)行.語法如下:try被保護(hù)語句finally處理語句(無論異常是

18、否發(fā)生,都必須處理)end;tryfinally 語句塊主要用于資源保護(hù)應(yīng)用程序向系統(tǒng)申請了資源(如內(nèi)存,圖形句柄),當(dāng)不需要這些資源時,就應(yīng)該及時釋放資源.句柄:系統(tǒng)資源是有限的,一般構(gòu)成一個資源鏈,鏈的長度是有限的,當(dāng)系統(tǒng)給應(yīng)用程序分配資源時,給每個資源設(shè)置一個ID號,這個ID號就是句柄.(系統(tǒng)資源相當(dāng)于一個個房間,而句柄就相當(dāng)于房間號.)句柄有限:1 資源是有限的;2數(shù)字表達(dá)的范圍也是有限的(整數(shù)有范圍的)Tryexcept語句塊Tryexcept語句塊用于運(yùn)行期錯誤處理,程序員可以用它編寫對不同類型異常的處理.異常發(fā)生后,判斷異常的類型,正確處理異常.Tryexcept語句塊一般和On

19、Do子句連用;語法如下:function Test(x, y: Real): Real;begintryResult := x / y;/被保護(hù)語句excepton EInvalidOp do Result := 0;/異常處理語句on EZeroDivide do Result := 0;on EOverFlow do Result := 0;on EUnderFlow do Result := 0;end;end;Tryexcept語句塊主要處理 缺省異常用戶一般只處理一些特殊的異常,并不是處理所有的異常.對那些用戶不關(guān)心的異常就可以采用缺省異常來處理.try/正常程序代碼excepton

20、 EExceptionClass do /處理特定類型的異常else /缺省異常處理end;注:else塊必須位于except塊的最后,可響應(yīng)任何類型的異常異常的傳遞Delphi對異常的處理方式是向后掃描程序的調(diào)用棧.假如過程A內(nèi)有過程保護(hù)代碼塊,在此代碼塊內(nèi)又調(diào)用了過程B,過程B沒有異常保護(hù),過程B調(diào)用了過程C,在C內(nèi)發(fā)生了異常.如C內(nèi)有該異常的處理程序,那么程序調(diào)用C的異常處理代碼一、異常的來源在Delphi的應(yīng)用程序中,下列的情況都比較有可能產(chǎn)生異常。(1)文件處理(2)內(nèi)存分配(3)Windows資源(4)運(yùn)行時創(chuàng)建對象和窗體(5)硬件和操作系統(tǒng)沖突二、異常的處理(1)tryexcep

21、tend;在try體內(nèi)的代碼發(fā)生異常時,系統(tǒng)將轉(zhuǎn)向except部分進(jìn)行異常的處理。這是Delphi處理異常的最基本的方式之一。(2)tryfinallyend;這種異常處理結(jié)構(gòu)一般用于保護(hù)Windows的資源分配等方面,它確保了無論try體內(nèi)的代碼是否發(fā)生異常,都需要由系統(tǒng)進(jìn)行最后的統(tǒng)一處理的一些Windows對象的正確處理。和tryexceptend不同,該結(jié)構(gòu)的finally部分總被執(zhí)行。(3)不存在tryexceptfinallyend結(jié)構(gòu)來既處理異常,又保護(hù)資源分配的結(jié)構(gòu),但是,tryexceptend結(jié)構(gòu)允許嵌套到tryfinallyend結(jié)構(gòu)中,從而實現(xiàn)既處理異常,又保護(hù)資源的分配

22、。三、異常的精確處理(1)定義一個異常。在Delphi中,每個異常都是Exception1類的一個派生類2。因此,定義一個異常就是定義一個Exception類的派生類。type EMyException = class(Exception);當(dāng)然,基類可以是Exception或者Exception的任何一個任何層次的派生類。(2)在程序中拋出一個異常。根據(jù)不同的情況拋出異常是使用異常的最基本的模式。在Delphi中,由raise語句來實現(xiàn)。【語法】raise 異常類.Create(異常的缺省說明);(3)在tryexceptend中更加精確的捕捉異常。使用on E:異常類 do結(jié)構(gòu)可以在do體

23、內(nèi)處理特定異常類所拋出的異常。四、異常的調(diào)試在Delphi IDE中,解除“Debugger Options”(可以使用菜單ToolsDebugger Options進(jìn)行訪問)中的Integrated Debugging復(fù)選框的勾選狀態(tài)可以進(jìn)行異常的調(diào)試。五、異常的補(bǔ)充說明(1)每一段程序都有可能產(chǎn)生錯誤!這是軟件業(yè)的一個不容置疑的現(xiàn)象和規(guī)律。事實上,傳統(tǒng)的ifelse結(jié)構(gòu)完全可以解決所有的錯誤,使用Exception機(jī)制也沒能夠回避在最原始的層次,通過遍歷可能的情況來產(chǎn)生異常的做法,那么,為什么還要異常機(jī)制?答案很清楚:異常提供了一種更加靈活和開放的方式,使得后來的編程者可以來根據(jù)實際的情況

24、處理這種錯誤,而不是使用預(yù)先設(shè)定好的處理結(jié)果。結(jié)構(gòu)化異常處理是Delphi語言內(nèi)建的特性.為我們處理異常提供了方便.處理異常有兩方面:1 異常處理可確保適當(dāng)?shù)鼗謴?fù)在應(yīng)用程序中分配或改變的任何資源.2 結(jié)構(gòu)化異常處理為開發(fā)人員提供了一種一致的處理各種類型運(yùn)行期錯誤的方式Delphi7異常處理機(jī)制異常處理的基本思想是通過提供規(guī)范方式處理軟,硬件錯誤的能力,使程序更加健壯.異常處理可以將處理錯誤的代碼與正常的邏輯處理代碼相分離.Delphi缺省的方式是在應(yīng)用程序收到異常之前捕獲異常.IDE會給出一個”預(yù)警”對話框,以指明應(yīng)用程序?qū)⒁a(chǎn)生異常.異常處理機(jī)制是一種程序設(shè)計安全策略,它是建立在保護(hù)塊思想上

25、,通過try和end語句塊對代碼的封裝確保在程序發(fā)生異常時,程序能夠正常運(yùn)行或釋放所占用的資源.Delphi7異常處理機(jī)制傳統(tǒng)程序設(shè)計中,用如下的偽代碼方法來檢查和處理程序錯誤:執(zhí)行一個任務(wù)If 前一個任務(wù)未能正確執(zhí)行執(zhí)行錯誤處理執(zhí)行下一個任務(wù)If 前一個任務(wù)未能正確執(zhí)行執(zhí)行錯誤處理Delphi7異常處理機(jī)制例;try Age := StrToInt(Edit1.Text); ShowMessage(Format(生于%d年, YearOf(Now) - Age); except on EConvertError do showmessage(輸入編輯框的不是一個有效的數(shù)字!); on ERa

26、ngeError do showmessage(輸入編輯框的年齡值太大!); end;異常類Delphi7根據(jù)異常類型定義了相應(yīng)的異常類.所有異常類的基類都是Exception類.Delphi7內(nèi)置了大量的異常類,用戶也可以通過Exception類自定義異常類.記住異常類的要點:1 異常類是響應(yīng)不同異?,F(xiàn)象的入口.2 熟悉異常類的層次結(jié)構(gòu).Exception異常類Exception是所有異常類的基類,它并不是以T開頭,而是以E開頭,它的派生類也是以E開頭的.Exception類定義于SysUtils單元中.Exception類最常用的方法是Create方法:Constructor Create

27、(const Msg:string);(我自己創(chuàng)建的異常!);該方法用于創(chuàng)建一個異常類的實例,也可以顯示錯誤信息,也可直接用這個方法提交一個異常raise (我拋出的異常!);例:try raise (我拋出的異常!); except on E: Exception do showmessage(異常類名稱: + + #13#10 + 異常信息: + ); end;Delphi7內(nèi)置的異常類Delphi7根據(jù)異?,F(xiàn)象的類型定義了相應(yīng)的異常類,這些異常類又稱為Delphi7內(nèi)置的異常類.具體分為運(yùn)行時庫異常類,對象異常類和組件異常類三大類.運(yùn)行時庫異常類(RTL)運(yùn)行時庫異常類可分為以下幾種:1

28、 整數(shù)計算異常 2 浮點計算異常 3 硬件異常 4 堆異常 5 輸入輸出異常(I/O異常) 6 字符轉(zhuǎn)換異常 7 類型轉(zhuǎn)換異常 8 啞異常整數(shù)計算異常EIntError 整數(shù)計算異常(基類)EDivByZero 整數(shù)除0溢處EIntOverFlow 整數(shù)溢出ERangeError 整數(shù)越界浮點計算異常EMathError 浮點計算異常(基類)EInvalidOp 無效浮點操作指令Eoverflow 浮點操作上溢Eunderflow 浮點操作下溢EZeroDivide 浮點計算除0硬件異常EProcessorException 硬件異常(基類)ESingleStep 應(yīng)用程序產(chǎn)生單步中斷Ebre

29、akpoint 應(yīng)用程序產(chǎn)生斷點中斷Efault 故障(繼承EProcessorException,也是基類)EStackFault 對處理器棧段的非法訪問EPageFault 內(nèi)存管理器無法正確使用交換文件EGPFault 保護(hù)性錯誤,一般由未初始化指針或?qū)ο笤斐蒃InvalidOpCode 處理器遇到未定義指令堆異常和(I/O異常)堆異常:EOutOfMemory 堆中沒有足夠的內(nèi)存完成操作EInvalidPointer 試圖訪問一個堆外的指針(I/O異常)EInOutError DOS輸入/輸出錯誤字符轉(zhuǎn)換/類型轉(zhuǎn)換異常和啞異常字符轉(zhuǎn)換異常EConvertError 數(shù)字到字符串或字符串

30、到數(shù)字轉(zhuǎn)換錯誤類型轉(zhuǎn)換異常EInvalidCast 類型轉(zhuǎn)換異常啞異常EAbort 調(diào)用Abort產(chǎn)生,不顯示錯誤提示框?qū)ο螽惓n悓ο螽惓n愂轻槍Ψ墙M件對象引發(fā)的異常而定義的.對象異常類包括:1 流異常類2 打印異常類3 圖形異常類4 字符串鏈表異常類流異常類流異常是指在程序中進(jìn)行與流相關(guān)的操作時產(chǎn)生的異常.流異常類的基類是EStreamError,其他流異常類都直接或間接從它派生.派生關(guān)系見書48頁圖打印異常打印異常是由于應(yīng)用程序向不存在的打印機(jī)發(fā)送打印命令或由于某種原因打印工作無法送到打印機(jī)時引發(fā)的.打印異常類為Eprinter,定義于Printers單元圖形異常圖形異常主要包括EInva

31、lidGraphic和EInvalidGraphicOperation兩個類均定義于Graphics單元EInvalidGraphic異常滿足下列情況之一時引發(fā):當(dāng)應(yīng)用程序試圖向一個并不包含合法的位圖,圖象,元文件或用戶自定義圖形類型的文件中裝入圖象時.當(dāng)應(yīng)用程序試圖裝入不可識別擴(kuò)展名的文件時當(dāng)圖象與LoadFromClipboardFormat或SaveToClipboardFormat中的格式不匹配時.當(dāng)應(yīng)用程序試圖將圖象的PixelFormat設(shè)為不支持的值EInvalidGraphicOperation異常在滿足下列條件之一時發(fā)生:應(yīng)用程序訪問圖象中不存在的掃描線時.應(yīng)用程序不能成功寫

32、入圖象時.應(yīng)用程序在畫布未處于有效狀態(tài)時進(jìn)行繪制.應(yīng)用程序裝入未知或不支持的圖象格式時.應(yīng)用程序?qū)D象的PixelFormat設(shè)為不支持的值時不能分配該操作的句柄時.字符串鏈表異常字符串鏈表異常是由于用戶對字符串鏈表進(jìn)行非法操作時引發(fā)的.包括EStringListError,EListError等.由于許多部件都有一個Tstrings抽象類的屬性(如Tiistbox組件的Items屬性等),因而字符串鏈表異常在組件編程中很重要.EStringListError一般在字符串鏈表越界時產(chǎn)生.而EListError異常通常在以下情況下發(fā)生:當(dāng)索引項超出鏈表范圍時當(dāng)字符串鏈表的Duplicates屬性

33、設(shè)置為dupError同時應(yīng)用程序試圖加入一個重復(fù)的字符串時.當(dāng)向已排序的字符串鏈表中插入字符串時.組件異常類組件異常類用于響應(yīng)組件異常,組件異常是由于對VCL組件進(jìn)行操作時,違反了組件的使用規(guī)則及其特征而引發(fā)的,可分為兩大類:通用組件異常、專用組件異常、通用組件異常。常見的有非法操作異常,組件異常和資源不足異常三種類型,對應(yīng)于EInvalidOpetation,EComponentError和EOutOfResource異常類.引發(fā)非法操作異常的原因有:應(yīng)用程序試圖對Parent屬性為nil的組件進(jìn)行一些需要窗口句柄的操作.試圖對窗體拖放操作.引發(fā)組件異常的原因有:Delphi不能注冊某個組

34、件應(yīng)用程序不能重命名某個組件資源不足異常被引發(fā)是由于當(dāng)應(yīng)用程序試圖創(chuàng)建窗口句柄而操作系統(tǒng)沒有多余的句柄可分配專用組件異常:許多組件都定義了相應(yīng)的組件異常類.列出幾個典型的組件異常類:EMenuError異常,菜單異常,是由于程序?qū)Σ藛蔚姆欠ú僮鞫l(fā)的.定義于Memus單元EInvalidGridOperation異常.非法的網(wǎng)格操作,如試圖引用一個不存在的網(wǎng)格單元時引發(fā).定義于Grids單元EDatabaseError異常.數(shù)據(jù)庫異常是由于對數(shù)據(jù)庫的非法操作引起的.用戶自定義異常類創(chuàng)建用戶自定義異常類的方法拋出自定義異常用戶自定義異常類與內(nèi)置異常類的區(qū)別異常類對象與其他類對象的區(qū)別創(chuàng)建用戶自定義異常類的方法選擇Exception作為基類,按照定義類的一般方法,建立自定義的異常類就可以了.如:type EMyException = class(Exception)/需要定義屬性或方法時,寫在此處即可 end;拋出自定義異常Delphi不會管理用戶自定義異常的拋出,程序員必須自己拋出自己創(chuàng)建的異常.用raise語句可拋出異常:raise (My Exception);用戶自定義異常類

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論