a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

截獲Delphi中的異常

2019-11-18 18:48:25
字體:
供稿:網(wǎng)友
所謂異常,就是指在程序運(yùn)行過程中,由于程序本身的問題或是用戶的不當(dāng)操做而造成的暫
停程序執(zhí)行和出現(xiàn)錯誤結(jié)果的情況。用Delphi編寫過程序的人對異常肯定不會陌生。異常的來源
是多方面的,引用空指針、賦值越界、被零除等都可以引發(fā)一個異常。如果對異常事件不進(jìn)行適
當(dāng)?shù)奶幚恚芸赡軐?dǎo)致整個程序的崩潰。好在Delphi對可能出現(xiàn)的幾乎所有的異常都能自動進(jìn)行
處理。

  一、Delphi自動處理異常的簡單例子

  1.在Delphi(3.0)集成環(huán)境下,選Tools | Environment Options菜單 ,在出現(xiàn)的Environment
 Options窗口中的PReferences頁上有一個Break on exception選項(xiàng)(在左下部)。該選項(xiàng)在缺省
狀態(tài)下是被選中的,這樣在Delphi集成環(huán)境下運(yùn)行程序若發(fā)生了異常,程序?qū)⒆詣颖淮驍喽祷?BR>Delphi調(diào)試狀態(tài),光標(biāo)停留在出現(xiàn)異常的代碼上,以便編程人員修改。現(xiàn)在單擊該選項(xiàng)使其不被
選中,然后確定。

  2.新建一個工程,存為Excep.dpr(后面還有用),相應(yīng)的單元存為Excpunit.pas;在Form1
中放入一個TmaskEdit構(gòu)件,將其EditMask屬性設(shè)定為Date,再放入一個Tbutton構(gòu)件,雙擊之,
編寫其OnClick事件如下:

  procedure TForm1.BitBtn1Click(Sender: TObject);

  var k:integer;

  begin

  k:=0;

  k:=9 div k;{這里將產(chǎn)生一個被0除的異常}

  end;

  3.存盤并運(yùn)行程序,在MaskEdit1中隨便寫入一兩個數(shù)字,回車,這時會產(chǎn)生(也稱為喚起)
一個異常,彈出如下窗口:


 

  

   這是由于在MaskEdit框中輸入的數(shù)據(jù)不完整而產(chǎn)生了異常,Delphi自動進(jìn)行了處理,單擊
“確定”后程序繼續(xù)執(zhí)行。單擊Button1按鈕,又會出現(xiàn)另一個類似窗口,因?yàn)檫@里出現(xiàn)了一個被
零除的異常。

  二、Delphi對異常情況的提示是英文的,對中國人不太習(xí)慣,我們可以截獲這些異常,實(shí)現(xiàn)用
中文提示。具體做法如下:

  1.修改Button1的OnClick事件如下:

  procedure TForm1.BitBtn1Click(Sender: TObject);

  var k:integer;

  begin

   k:=0;

   try

   k:=9 div k;

   except

   showmessage(′除數(shù)不能為零′);

   end;

  end;

  2.存盤并運(yùn)行程序,單擊Button1后出現(xiàn)的提示框?qū)⒈恢形牡摹俺龜?shù)不能為零”代替。利用
try......except......end語句是處理異常的一種常用方法,在保留字try后面的語句執(zhí)行如果
出現(xiàn)異常,就執(zhí)行保留字except與end間的語句,否則執(zhí)行end后面的語句,從而代替了Delphi對
異常的缺省處理。與之類似的另一個語句是try......finally......end,與try......except..
....end不同的是,不管try后的語句會不會產(chǎn)生異常,finally后面的語句是一定會被執(zhí)行的。

  但是,對于像TmaskEdit框產(chǎn)生的這類異常,用try語句就顯得無能為力了,因?yàn)槲覀冋也坏?BR>寫try語句的地方。我們只能用另一種方法來解決。

  三、Delphi中的每一個項(xiàng)目都有一個Tapplication對象,這是一個不可見的對象。我們可以
通過修改它的OnException事件,來實(shí)現(xiàn)對特殊異常的控制,具體做法如下:

  1?痹?Form1的類中聲明一個過程Myexception,該過程與Tapplication的OnException事件有
相同的參數(shù):

  public

  { Public declarations }

  procedure MyException(Sender:TObject;E:Exception);

  2.編寫該過程代碼:

  procedure TForm1.MyException(Sender:TObject;E:Exception);

  begin

  if E is EDBEditError then showmessage(′輸入不符合規(guī)則′)

  else

  Application.ShowException(E); {調(diào)用缺省的異常處理}

  end;

  3.在Form1的OnCreate事件中為Tapplication的OnException事件賦值:

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  Application.OnException :=MyException;

  end;

  4.存盤并運(yùn)行程序,在MaskEdit框中隨便輸入一兩個數(shù)字,回車,一個中文的提示框?qū)⑷?BR>代原來的英文提示框。

  四、這里提醒大家注意三點(diǎn):

  1.Delphi把所有的異常歸納為一個類,即異常類(Exception),每一個特定的異常被視為
一個特例,在c:program filesorlandDelphi 3source tlsys目錄下的sysutils.pas中
有關(guān)于Exception類的定義。

  2.Tapplication對象提供了一個過程HandleException來處理在程序中被喚起而未被處理的
異常事件,當(dāng)我們?yōu)門application的OnException事件賦值后,HandleException就會調(diào)用新的
過程來代替缺省的出錯信息顯示。我們可以在自己的過程中自由地安排顯示的內(nèi)容,以達(dá)到漢
化的效果。

  3.我們通過IF判斷語句來獲取指定的異常,用一個簡單的辦法可以得到指定異常的名稱。
回到文章開頭的那個例子,這里我們把Break on exception選項(xiàng)選中,再次運(yùn)行程序,輸入
不當(dāng)?shù)臄?shù)字使MaskEdit1產(chǎn)生異常,這時將出現(xiàn)下面的窗口:


 

  

  窗口中第二排的EDBEditError就是該異常的名稱,本文程序中的代碼:

  if E is EDBEditError then showmessage(′輸入不符合規(guī)定′)

  就是根據(jù)這個名稱寫的。當(dāng)不知道異常的確切名稱時,就可以從這里獲得信息。在用這種
方法處理異常事件時,一定要小心,應(yīng)為你已經(jīng)取代了Delphi的缺省的異常處理,如果處理不
當(dāng)可能會使系統(tǒng)崩潰。

  以上程序在Windows 95 Delphi 3.0下運(yùn)行通過。


上一篇:動態(tài)賀卡EXE生成器---Delphi中流的應(yīng)用(9)

下一篇:Delphi編程技巧實(shí)例

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 亚洲精品国偷拍自产在线观看蜜桃 | 日本精品不卡 | 日韩在线国产 | www.超碰| 超碰激情 | 国产精品二区三区 | 国产成人精品视频 | 亚洲爱婷婷色婷婷五月 | 日韩精品av一区二区三区 | 黑人精品xxx一区一二区 | 精品一区二区三区在线观看 | 99国产精品久久久久久久 | 国产精品一区二区不卡 | 国产精彩视频 | 欧美3区| 精品视频久久 | 中文字幕在线视频免费播放 | 中文字幕一区二区三区四区不卡 | 日本一区免费看 | 在线观看国产视频 | 国产伦一区 | 色999精品| 亚洲精品在线视频 | 免费成人在线视频网站 | 美女天堂网 | 久久视频一区二区 | 手机看片福利视频 | 老牛嫩草一区二区三区眼镜 | 91欧美在线 | 国产精品一区免费观看 | 中文字幕免费在线观看视频 | 国产精品美女在线观看 | 中文字幕在线视频免费播放 | 国产在线二区 | 国产精品国产三级国产aⅴ中文 | 日韩一区二区久久 | 国产在线h | 99热在线播放| 国产精久久久久久久妇剪断 | 在线视频91 | 在线免费看a |