全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1389
推到 Plurk!
推到 Facebook!

如何攔截 ShowMessage 的對話框,並按下確定鍵.....

尚未結案
kadlac
一般會員


發表:18
回覆:30
積分:9
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-28 20:22:26 IP:61.219.xxx.xxx 未訂閱
大家好!   請問如何在程式中攔截因錯誤訊息而出現的ShowMessage 的對話框,並按下確定鍵,以做後續的處理??      在以下的文章中,可以攔截按鍵,是不是也有類似方法攔截到ShowMessage 的對話框?     http://delphi.ktop.com.tw/topic.php?topic_id=43723       謝謝您熱心幫忙
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-28 20:49:15 IP:61.64.xxx.xxx 未訂閱
引言: 大家好! 請問如何在程式中攔截因錯誤訊息而出現的ShowMessage 的對話框,並按下確定鍵,以做後續的處理?? 在以下的文章中,可以攔截按鍵,是不是也有類似方法攔截到ShowMessage 的對話框? http://delphi.ktop.com.tw/topic.php?topic_id=43723 謝謝您熱心幫忙 < face="Verdana, Arial, Helvetica"> 您好, 我看不太懂您的問題, 如果您只是要攔截錯誤訊息, 不讓它跑出來, 可以用try except, 例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
  StrToInt('a');
end;    procedure TForm1.Button2Click(Sender: TObject);
begin
  try
    StrToInt('a');
  except
    // 攔截錯誤訊息, 秀出自己的訊息
    ShowMessage('Error');
  end;
end;
Button1 沒攔截, Button2有攔截, 你可以比較其中的不同...
kadlac
一般會員


發表:18
回覆:30
積分:9
註冊:2004-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-28 21:16:08 IP:61.219.xxx.xxx 未訂閱
Zard兄您好! 我目前想攔截的Message是我引用的元件中產生的,以Try.. Exception方法我試過了並沒有辦法攔截到該訊息,因為該訊息並非是錯誤造成的,而是該元件在執行過程中自己產生的... 比方當出現對話框 " Please wait a moment " 時,我要能即時偵測到,並加入處理程式碼.
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-28 21:35:11 IP:61.64.xxx.xxx 未訂閱
引言: Zard兄您好! 我目前想攔截的Message是我引用的元件中產生的,以Try.. Exception方法我試過了並沒有辦法攔截到該訊息,因為該訊息並非是錯誤造成的,而是該元件在執行過程中自己產生的... 比方當出現對話框 " Please wait a moment " 時,我要能即時偵測到,並加入處理程式碼.
您好, 若只是元件所產生的訊息, 建議您直接修改元件的程式碼, 若要直接攔截而不透過修改元件程式碼的話, 可能還要在研究一下它是如何顯示訊息的, 比如說他是用Win API的MessageBox, 你可以用API Hook去擋, 若不是的話就要另想方法了.
kadlac
一般會員


發表:18
回覆:30
積分:9
註冊:2004-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-29 09:11:00 IP:61.219.xxx.xxx 未訂閱
謝謝您的回答! 1. 若是直接修改元件的程式碼, 如何在主程式中呼叫它? (不好意思...還不大熟 BCB ) 2. 若要直接攔截而不透過修改元件程式碼的話,我是知道該元件是用 BCB 的 ShowMessage 顯示訊息的.. 這樣可以用 Hook 嗎? 如果可以,可以示範一下嗎 ? 感謝感謝!!
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-29 10:50:20 IP:221.169.xxx.xxx 未訂閱
kadlac:
請試試使用以下方式看可否抓到錯誤訊息再行處理!
.hpp
public:                // User declarations
  __fastcall TForm1(TComponent* Owner);
  void __fastcall HandleExceptions(TObject *Sender, Exception *E);
.cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// 設定exception handler.自定義異常處理窗口
  Application->OnException = HandleExceptions;
}
void __fastcall TForm1::HandleExceptions(TObject *Sender, Exception *E)
{
  if (E->Message.Length())  {
    Screen->Cursor = crArrow;
    AnsiString errorstr="應用程序發生了錯誤.\n" E->Message;
    Application->MessageBox(errorstr.c_str(),"發生異常",MB_OK);
  }
}
請參考!
Andy Chang
------
Andy Chang
kadlac
一般會員


發表:18
回覆:30
積分:9
註冊:2004-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-29 11:25:41 IP:61.219.xxx.xxx 未訂閱
Andy兄, 謝謝您! 由於我目前想攔截的Message是我引用的元件(Comm 元件) 中產生的,您說的方法我試過了並沒有辦法攔截到該訊息,因為該訊息並非是錯誤造成的,而是該元件在執行過程中自己產生的... 比方當出現對話框 " Please wait a moment " 時,我要能即時偵測到,並加入處理程式碼.
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-29 11:54:39 IP:221.169.xxx.xxx 未訂閱
kadlac:我上傳一個BCB5寫的程式 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58762 【BCB】Delete Norton AntiVirus Message Box 請參考! 說明:NT-Server上使用Norton AntiVirus發現病毒時會show出MessageBox ,我這程式就是偵測發現並刪除之。 可能可以符合你的需要。 裡面寫的很亂!請你慢慢研究。 請參考! Andy Chang 發表人 - andychang1690 於 2004/10/29 11:56:00
------
Andy Chang
kadlac
一般會員


發表:18
回覆:30
積分:9
註冊:2004-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-29 17:13:39 IP:61.219.xxx.xxx 未訂閱
Andy 兄, 謝謝囉! 感恩感恩! 
系統時間:2024-05-06 0:47:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!