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

關於"紀錄錯誤訊息的方式"

尚未結案
cliffpen
一般會員


發表:35
回覆:18
積分:15
註冊:2005-05-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-12 13:20:21 IP:220.130.xxx.xxx 未訂閱
請問各位大大: 假設我們在程式中定義了錯誤訊息,例如:  
 
Application->MessageBox("XXX設定錯誤,請重新設定","ERROR",MB_OK);
當我按下 OK 時,有辦法把錯誤訊息紀錄下來,並讓程式繼續執行 請問有類似這種功能的API或是方法嗎?
powmien
初階會員


發表:27
回覆:80
積分:41
註冊:2004-10-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-12 18:33:56 IP:60.248.xxx.xxx 未訂閱
以前我的作法是程式開始時先開一個檔案. String error_msg; error_msg="1.xxxxxxx"; save_error_msg(error_msg); <== 寫檔 Application->MessageBox("XXX設定錯誤,請重新設定","ERROR",MB_OK); 最後再關檔。 天下英雄出我輩,一入江湖歲月催; 皇圖霸業談笑中,不勝人生一場醉。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-13 13:37:32 IP:59.115.xxx.xxx 未訂閱
cliffpen 您好:    就我的印象而言,應該是沒有現成的 API 可記錄您所描述的那種訊息,您所描述的 "錯誤訊息" 僅僅是一個 "字樣" 而已,而這個字樣是您自定的,跟系統並無直接的關連,並不會觸發系統的任何機制,應該是不會有任何 API 可以獲取或記錄該訊息的。 既然要記錄的訊息是自定的,那麼您不妨考慮將想要處理的動作,比照 MessageBox 的參數格式寫成自定函式,在自定函式中將顯示訊息紀錄訊息的動作都寫進去,然後在所有要顯示提示訊息或錯誤訊息的位置,都改成呼叫這個自定函式,這樣子應該也會很方便的。 7 天天敲鍵盤 v 時時按滑鼠 8
andychang1690
資深會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-14 03:14:57 IP:221.169.xxx.xxx 未訂閱
cliffpen:參考看看
http://delphi.ktop.com.tw/topic.php?topic_id=55876
【問題】關於錯誤訊息及Exception的處理? 
答題得分者為:powerhowardchen    http://delphi.ktop.com.tw/topic.php?topic_id=19843
 [推薦] TApplication類的簡要說明 
axsoft 版主 
OnException:
當應用程序發生異常時.你也可以自定義一個異常處理過程而不用缺省的ShowException
自定義異常處理窗口
缺省異常處理窗口是用ShowException顯示的一個窗口,其標題為應用程序的Title.我們也可以自定義異常處理函數,以便對異常進行自定義的處理。    void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Application->OnException = HandleException;
}
void __fastcall TForm1::HandleException(TObject *Sender,SysUtils::Exception *E)
{
  AnsiString errorstr="應用程序發生了錯誤.\n" E->Message;
  Application->MessageBox(errorstr.c_str(),"發生異常",MB_OK);
}    把錯誤訊息紀錄下來?
使用FileCreate(),FileOpen(),FileSeek(),FileWrite(),FileClose()
等方式皆可。    請參考!    
Andy Chang
------
Andy Chang
cliffpen
一般會員


發表:35
回覆:18
積分:15
註冊:2005-05-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-15 13:06:52 IP:220.130.xxx.xxx 未訂閱
關於前兩位大大的建議,在下有寫出了如下的程式:  
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    if(!FileExists("D:\\Error.txt"))   FileCreate("D:\\Error.txt");
}
//---------------------------------------------------------------------------
void TForm1::Error_Message(const char * Text, const char * Caption , int Flags)
{
    TStringList *slBuf=new TStringList;
    slBuf->LoadFromFile("D:\\Error.txt");
    const String SText=DateToStr(Date()) TimeToStr(Time()) " " (String)Text;
    slBuf->Add(SText);
    slBuf->SaveToFile("D:\\Error.txt");
    delete slBuf;
    Application->MessageBox(Text, Caption, Flags);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Error_Message("This is ERROR##1","error",MB_OK);
}
//---------------------------------------------------------------------------
不過 andychang1690 大大提出來的解法似乎又更深入了,我得再研究看看還有沒有更好的寫法,感謝大大們的鼎力相助
cliffpen
一般會員


發表:35
回覆:18
積分:15
註冊:2005-05-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-15 16:33:30 IP:220.130.xxx.xxx 未訂閱
為了讓messagebox出現後,能自動消失 參考了 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37409 此篇後 程式改為(藍色部分為新加的部份) 可是當messagebox出現後卻完全沒反應,請問各位大大指點迷津  
 
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
     Timer1->Enabled=false;  
    if(!FileExists("D:\\Error.txt"))   FileCreate("D:\\Error.txt");
}
//---------------------------------------------------------------------------
void TForm1::Error_Message(const char * Text, const char * Caption , int Flags)
{
     Timer1->Enabled=true; 
    TStringList *slBuf=new TStringList;
    slBuf->LoadFromFile("D:\\Error.txt");
    const String SText=DateToStr(Date()) TimeToStr(Time()) " " (String)Text;
    slBuf->Add(SText);
    slBuf->SaveToFile("D:\\Error.txt");
    delete slBuf; 
    Application->MessageBox(Text, Caption, Flags);    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    SendMessage(GetActiveWindow,WM_CLOSE,0,0);
     Timer1->Enabled=false; 
} 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Error_Message("This is ERROR##1","error",MB_OK);
}
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-15 20:54:59 IP:59.115.xxx.xxx 未訂閱
cliffpen 您好:    請將您的設定修改如下,應該就可以了:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    SendMessage(GetActiveWindow(), WM_CLOSE, 0, 0);
     Timer1->Enabled = false; 
}
7 天天敲鍵盤 v 時時按滑鼠 8
cliffpen
一般會員


發表:35
回覆:18
積分:15
註冊:2005-05-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-16 10:01:39 IP:220.130.xxx.xxx 未訂閱
原來就差這麼臨門一腳啊! 感謝各位大大的指點 可是答題得分要怎麼給呢? 有點傷腦筋了 因為各位都有回答到我的問題..
andychang1690
資深會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-18 01:29:43 IP:221.169.xxx.xxx 未訂閱
cliffpen:
讓messagebox出現後,能自動消失
建議參考對岸
http://www.delphibox.com/article.asp?articleid=1125
使任何訊息方塊和對話方塊帶有自動關閉的功能
使用Delphi,但BCB可以使用。
請參考!
Andy Chang
------
Andy Chang
系統時間:2024-11-22 19:55:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!