国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > 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強大易用穩定與最終用戶交互良好(新)

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

新聞熱點

疑難解答

圖片精選

網友關注

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国精一区二区三区| 国产美女在线一区二区三区| 国产福利在线免费观看| 国产三级在线看| 日本中文字幕高清视频| 久久精品免视着国产成人| 国产不卡精品一区二区三区| 精品国产免费第一区二区| 亚洲综合在线免费| 国内自拍视频在线看免费观看| 激情六月婷婷| 国产黄色免费| 久久99亚洲网美利坚合众国| 国产福利一区二区在线精品| 热99在线观看| 国产视频第一区| av在线不卡网站| 国产午夜在线| 一本大道久久精品| 国产网站免费观看| 国产福利免费观看| eeuss影院在线播放| 九九热免费在线视频| 国产情侣高潮对白| www.五月色.com| 中文日本在线观看| 国产中文字幕在线| 精品视频一区二区观看| 最新天堂资源在线资源| 国产变态拳头交视频一区二区| 精品福利视频导航大全| 男人天堂亚洲| 精品偷拍激情视频在线观看| 丁香婷婷激情| 在线午夜影院| 国产无遮挡又黄又爽免费网站 | 午夜在线不卡| 欧美成人久久电影香蕉| eeuss影院在线观看第一页| 国产h在线观看| 国产香蕉在线| 国产视频三区| 2021av在线| 99热免费在线| 香蕉视频在线看| 精品三级久久久久久久电影聊斋| 国产网站观看9久| 国产人成在线观看| 福利视频在线导航| 免费观看久久久久| 欧美性xxxx交| 九九99九九精彩| 国产在线三区| 国产网站av| 精品国产高清a毛片无毒不卡| 伊人资源视频在线| xxxx视频在线| 中文字幕在线播放网址| 国产精品久久麻豆| 在线观看中文字幕| 欧美性猛交xxxx免费看蜜桃| 国产美女一区视频| 国产一级激情| 国产精品白浆视频免费观看| 国产三级在线免费观看| 在线中文字幕观看| 免费国产在线视频| 国产高清免费在线播放| 四虎国产精品永久在线| 国产毛片毛片| 中文日本在线观看| 九色视频网站| 国产黄色免费网站| 日本h片在线观看| 国产亚洲精品午夜高清影院| 精品一区二区三区在线成人| 成 人免费视频播放| 2020亚洲男人天堂| 国产中文字幕在线观看| 国产福利在线观看| 麻豆国产在线播放| 国产成+人+亚洲+欧美+综合| 欧美精品久久久久久久小说| 国产黄色在线网站| 黄色网址在线免费播放| 在线亚洲不卡| 国产寡妇树林野战在线播放| 国内精品一区视频| 在线观看的av网站| 国产福利av网站| 中文字幕在线视频网| 日本在线观看| 伊人狠狠av| 精品国产一区二区三区四区阿崩 | 中文字幕在线免费观看| 亚洲妇熟xxxx妇色黄| 国产成人综合亚洲欧美在| 国产免费av在线| 黄色片视频在线观看| 日本免费视频www| 一个人看的www免费观看视频| 国产成人午夜| 一本大道五月香蕉| 午夜在线视频播放| 欧美日韩视频精品二区| h网址在线观看| 噜噜噜噜噜在线视频| 黄色av网站在线| 中文字幕中文字幕在线中高清免费版 | 精品全国在线一区二区| 国产不卡在线| 日本亚洲欧美| 国产乱精品一区二区三区| 国产精品一区二区三区四区色| 丁香花视频在线观看| 国产精品伦理一区二区三区| 五月婷婷在线视频| 国产精品久久久高清免费| 2021天堂中文幕一二区在线观| 在线āv视频| 国产麻豆麻豆| av超碰在线| 国产精选在线观看| 伊人网在线视频| 国产理论片免费观看| 精品国内一区二区三区免费视频| 青青草在线免费观看| 国产亚洲精品久久久久久青梅 | 国产人成高清视频观看| av激情在线| 国产一级粉嫩xxxx| www.91av| 国产成人亚洲欧美电影| 九色自拍视频| 日本在线视频www鲁啊鲁| 国产小黄视频| 欧美日韩一区二区三区视视频| 好吊日视频在线观看| 在线观看av中文| 国产一起色一起爱| 精品资源在线看| 四虎网站在线观看| 国产夫妻视频| 高清在线观看av| 亚洲久草视频| 国产精品剧情一区二区三区 | 国产亚av手机在线观看| 九九热在线观看视频| 亚洲精品乱码电影在线观看| 国产午夜在线| 国产精品冒白浆免费视频 | 99视频在线观看地址| 麻豆精品免费视频入口| 亚洲高清在线免费| av亚洲男人天堂| 精品国产一区二区三区久久久狼牙 | 国产系列在线观看| 二人午夜免费观看在线视频| 日本福利在线观看| 亚洲国产aⅴ精品| av在线天天| 人人干在线视频| 免费a在线观看| 久久99精品久久久久久野外| 久热国产在线视频| 国产免费av高清在线| 国产裸舞福利在线视频合集| 黄色一级视频网站| 最近中文av字幕在线中文| 1区2区视频| 国产白浆在线| 午夜影院免费看| 天天草天天干| 九九在线视频| 国产丝袜视频在线播放| 国产h色视频在线观看| a√在线视频| 黄色av网站在线免费观看| 国产视频1区| www.操操操| 午夜视频在线观看网站午夜视频在线 | 久热中文字幕| 国产一二三区精品视频| 国产区高清在线| av网址在线播放| 国产麻豆高清视频在线第一页| 国产网红在线观看| 亚洲xxxxxx| 国产精品久久人| www.夜夜操| 国产香蕉在线| 永久免费不卡在线观看黄网站 | 欧美日韩久久中文字幕| 国产美女免费观看| 午夜在线视频播放| 国产小视频在线高清播放| 日本欧洲一区| 国产精品入口麻豆电影| 日本视频三区| 一区二区三区四区在线免费视频|