亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

沉默的異常--Delphi幫助尋寶之一

2019-11-18 18:45:23
字體:
來源:轉載
供稿:網友

更新歷史:No.2

更新時間:2001-10-21 02:42

更新人員:Musicwind®

更新備注:修改格式。

 

更新歷史:No.1

更新時間:2001-10-19 21:15

更新人員:Musicwind®

更新備注:創建。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

       前言:沉浸于Delphi已逾三載,可是每每翻閱Delphi的幫助文檔,還是會有許多收獲,于是不免感慨Delphi的博大!在慚愧之余,將些許心得和收獲整理,與諸位當中如我般自大而學識尚淺者,共勉。

 

1.         什么是沉默的異常?(為什么不是沉默的羔羊?;-))

沉默的異常,即Slient Exceptions,指的是在缺省情況下不會出現討厭的消息提示框的異常類型:EAbort。在Object Pascal中,異常類EAbort是所有沉默的異常類的祖先類(而EAbort是繼承Exception而來)。引發(Raise)一個EAbort將導致一個執行模塊的停止,直到有最外層的異常處理模塊截獲它,但是并不因此出現帶有紅色停止標志的消息框。參考如下代碼:

      try

        ShowMessage('Hello1');

        Raise EAbort.Create('Abort it');

        ShowMessage('Hello2');

     except

       on E: Exception do

         showmessage('On Exception');

     end;

 

       執行結果顯示兩個消息框,一個是”Hello1”,另一個是”On Exception”。這表明,EAbort確實發揮了作用,因為它跳過了”ShowMessage(‘Hello2’)”這個語句;同時,沒有出現”Abort it”的消息框,也證實了EAbort異常類的不出現對話框的特點(在設計期間也是如此);并且,消息框”On Exception”表明,雖然可能EAbort是個不同于普通異常的異數,但這并不妨礙我們沿用老的Try-Except語句來捕獲它。

 

2.         為什么要用EAbort

EAbort在某些場合下很有用。比如當我們需要終止某項操作,而又不希望讓用戶察覺(不想讓他們看到默認的異常消息框)。當然,要達到相同的效果,使用普通的異常也可以做到(比如使用Try-Except句型,將代碼放在Try段,需要終止操作則raise一個異常,而在Except段不寫任何代碼),但是這一切沒有比使用EAbort來的簡單又直接。

 

3.         有什么簡便一點的嗎?――使用Abort過程

SysUtils單元中定義的一個過程Abort可以讓我們方便的使用EAbort。查看Abort的實現源碼

 

    PRocedure Abort;

      function ReturnAddr: Pointer;

      asm

         MOV     EAX,[EBP + 4]

      end;

    begin

      raise EAbort.Create(SOperationAborted) at ReturnAddr;

    end;

       這里的SOperationAborted通常就是” Operation aborted”

 

4.         揭開面紗――實現原理

也許各位和我一樣,對于EAbort為什么是沉默的感到好奇。Delphi在其內部,究竟對EAbort做了什么手腳呢?讓我們一起來看個究竟。

       打開一個新的工程,點擊Find in Files,輸入”EAbort”關鍵字,然后選中Search in Directories單選框,并將Search Directory Options中的File Mask編輯框設置為Delphi源碼所在的目錄名(比如我的是:D:Program FilesBorlandDelphi6Source),同時別忘記給Include SubDirectory打勾。最后,點擊”OK”開始搜索。

       結果我們發現Delphi源碼中與EAbort有瓜葛的達17處之多。除去Sysutils單元中兩處對EAbort的聲明以及部分注釋語句,我們發現絕大多數代碼類似于:

       if ExceptObject is EAbort then

       以及:

       if not (E is EAbort) then

       等等。

       無一不是根據RTTI來對EAbort特殊對待的――原來EAbort的實現就這么簡單!

       值得關注的兩個單元是:Forms(linux版本為QForms)AppEvnts,在前者的代碼中我們更不難找到問題的答案。參見Delphi源碼:

    procedure Tapplication.HandleException(Sender: TObject);

    begin

      if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);

      if ExceptObject is Exception then

      begin

        if not (ExceptObject is EAbort) then

          if Assigned(FOnException) then

            FOnException(Sender, Exception(ExceptObject))

          else

            ShowException(Exception(ExceptObject));

      end else

        SysUtils.ShowException(ExceptObject, ExceptAddr);

    end;

 

5.         AbortBreakExit之區別

AbortBreakExit有些相似,又很不同。Break用來在循環語句中跳出一層循環。Exit用來跳出當前執行的函數體(或過程體)。Abort可以讓你跳出一層或者多層代碼段,直到有異常捕獲的代碼將它捕獲。

 

6.         自定義沉默的異常

與聲明一個普通異常類的子類相同,只需將EAbort及其子類作為祖先類即可:

TMyException = Class(EAbort);

TNextException = Class(EAbort);

等等。

Musicwind®@HangZhou.Zhejiang.China

2001-10-20

更多文章

 

 [文終]


上一篇:用Delphi編寫點對點傳文件程序(1)

下一篇:Delphi報表控件----SReport3強大易用穩定與最終用戶交互良好(新)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线播放| 国产精品久久久久久五月尺| 久久精品国产96久久久香蕉| 久久久久久91香蕉国产| 国产精品91在线| 国产亚洲欧美日韩精品| 久久6免费高清热精品| 一区二区亚洲欧洲国产日韩| 91久久久久久国产精品| 欧美极品在线视频| 欧美性猛交xxxx免费看| 成人免费xxxxx在线观看| 国产激情综合五月久久| 国产精品国产自产拍高清av水多| 国产精品你懂得| 欧美午夜久久久| 久久精品一本久久99精品| 欧美肥老太性生活视频| 精品久久久久久久久久久| 亚洲精品视频免费在线观看| 色妞在线综合亚洲欧美| 91香蕉国产在线观看| 青青精品视频播放| 久久久久久国产精品美女| 国产精品成人aaaaa网站| 国产偷亚洲偷欧美偷精品| 精品久久久久久久久久ntr影视| 日韩在线免费高清视频| 91美女片黄在线观看游戏| 亚洲精品国产美女| 久久精品国产96久久久香蕉| 亚洲高清不卡av| 欧美日在线观看| 国产精品99久久99久久久二8| 成人午夜黄色影院| 51视频国产精品一区二区| 国内伊人久久久久久网站视频| 少妇av一区二区三区| 欧美日韩国产激情| 亚洲经典中文字幕| 亚洲在线免费视频| 97精品久久久中文字幕免费| 欧美性一区二区三区| www国产精品视频| 国产精品观看在线亚洲人成网| 国产日韩在线免费| 亚洲欧美激情另类校园| 国产一区二区动漫| 亚洲人成啪啪网站| 久久视频这里只有精品| 色噜噜狠狠狠综合曰曰曰| 国产91网红主播在线观看| 成人免费xxxxx在线观看| 国产精品欧美日韩久久| 亚洲精品国产精品久久清纯直播| 亚洲已满18点击进入在线看片| 久久高清视频免费| 亚洲第五色综合网| 96sao精品视频在线观看| 日韩av网站电影| 亚洲色图狂野欧美| 亚洲国产欧美一区| www.日韩系列| 日韩欧美一区二区三区| 久久久www成人免费精品| 欧美日韩人人澡狠狠躁视频| 国产成人免费91av在线| 国内精品一区二区三区| 欧美成人国产va精品日本一级| 91高清视频在线免费观看| 国产精品一区二区性色av| 亚洲乱码国产乱码精品精| 亚洲色图日韩av| 91久久精品一区| 欧美黄色性视频| 国产精品久久一区主播| 狠狠色狠色综合曰曰| 欧美激情一区二区三级高清视频| 国产噜噜噜噜久久久久久久久| 91精品国产综合久久香蕉| 大荫蒂欧美视频另类xxxx| 欧美中文字幕视频在线观看| 日韩高清av在线| 国产999精品久久久影片官网| 久久精品在线视频| 中文字幕成人精品久久不卡| 亚洲乱码国产乱码精品精天堂| 中文字幕亚洲第一| 欧美日韩国产丝袜另类| 国产成人福利视频| 精品日韩视频在线观看| 91免费高清视频| 日韩精品福利网站| 欧美性猛交xxxx免费看| 国产精品亚洲一区二区三区| 欧美高跟鞋交xxxxxhd| 国产精品极品美女粉嫩高清在线| 国产精品h在线观看| 亚洲性视频网站| 欧美激情2020午夜免费观看| 日韩精品视频免费在线观看| 亚洲欧美日韩国产精品| 亚洲人午夜色婷婷| 日韩中文字幕在线播放| 国内久久久精品| 久久这里只有精品99| 国产一区二区黑人欧美xxxx| 欧美疯狂做受xxxx高潮| 欧美成人合集magnet| 综合久久五月天| 亚洲国产成人精品久久| 欧美日韩一区二区免费视频| 国产成人精品国内自产拍免费看| 欧美一区二区影院| 久久午夜a级毛片| 一个色综合导航| 久久久久久久爱| 国产丝袜一区视频在线观看| 亚洲色图欧美制服丝袜另类第一页| 国产午夜精品全部视频播放| 国产精品一区av| 伦理中文字幕亚洲| 麻豆国产va免费精品高清在线| 91综合免费在线| 国产综合色香蕉精品| 51午夜精品视频| 日韩小视频在线观看| 国产精品第二页| 欧美激情在线一区| 亚洲精品色婷婷福利天堂| 国产精品免费久久久久影院| 午夜精品国产精品大乳美女| 欧美视频在线免费| 日韩精品久久久久| 国产小视频91| 亚洲第一中文字幕在线观看| 亚洲韩国日本中文字幕| 黄色成人在线播放| 成人妇女淫片aaaa视频| 亚洲影视中文字幕| 久久国产一区二区三区| 最近2019免费中文字幕视频三| 欧美疯狂性受xxxxx另类| 日韩中文在线视频| 欧美激情久久久久久| 午夜精品久久久99热福利| 国内精品久久久久影院优| 欧美在线视频观看免费网站| 中文字幕视频在线免费欧美日韩综合在线看| 538国产精品视频一区二区| 91视频九色网站| 中文字幕欧美日韩在线| 国产精品第100页| 亚洲v日韩v综合v精品v| 亚洲qvod图片区电影| 亚洲一区二区免费在线| 日韩精品欧美国产精品忘忧草| 国产精品自产拍高潮在线观看| 午夜精品免费视频| 日韩精品免费一线在线观看| 国产精品天天狠天天看| 九九视频直播综合网| 亚洲美女av网站| 亚洲欧美国产制服动漫|