請問一下各位先進有關Delphi的錯誤訊息! |
尚未結案
|
JS
一般會員 發表:22 回覆:26 積分:9 註冊:2002-07-20 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 各位高手們,小弟剛學delphi一個多月了,有一個問題一直很納悶--是有關於delphi的錯誤訊息,舉個實例來說:如果我想存取floppy,可是卻沒有插磁碟片 則delphi會popup一個Debugger Exception Notification的錯誤視窗,那我是想 用自己的try...except來處理錯誤的exception,而不要delphi跳出來的錯誤視 窗,不知要如何做?謝謝!給你一個參考寫法 try NMFTP1.Connect; Label_RemoteIP.Caption:= NMFTP1.RemoteIP; Label_LocalIP.Caption:= NMFTP1.LocalIP; Label_Status.Caption:= '已連線'; except on E:Exception do begin Application.MessageBox(pChar('主機連線失敗' #13 E.message),'錯 誤', MB_ICONERROR MB_OK); Label_RemoteIP.Caption:= '0.0.0.0'; Label_Status.Caption:= '連線失敗'; end; end; 或者你可以自建一個function, 把 E.message(這是個英文訊息字串)傳入function中, 自己再轉換成中文名稱秀出來, 例如 try NMFTP1.Connect; Label_RemoteIP.Caption:= NMFTP1.RemoteIP; Label_LocalIP.Caption:= NMFTP1.LocalIP; Label_Status.Caption:= '已連線'; except on E:Exception do begin ErrorFunc(E.Message); end; end; function ErrorFunc(Errmsg: string): boolean; begin if Errmsg='connect fail' then ShowMessage('連接失敗'); result:= True; end; |
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 各位高手們,小弟剛學delphi一個多月了,有一個問題一直很納悶--是有關於delphi的錯誤訊息,舉個實例來說:如果我想存取floppy,可是卻沒有插磁碟片 則delphi會popup一個Debugger Exception Notification的錯誤視窗,那我是想 用自己的try...except來處理錯誤的exception,而不要delphi跳出來的錯誤視 窗,不知要如何做?謝謝!舉例如下 : unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin try //處理存取磁碟的動作 except <--如發生錯誤 raise Exception.Create('磁碟存取發生錯誤');<--自定錯誤訊息 end; end; end. < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健 君子當自強不息~~@.@ |
JS
一般會員 發表:22 回覆:26 積分:9 註冊:2002-07-20 發送簡訊給我 |
感謝各位的回應,我順便把我的程式片段post上來:
procedure TForm1.Write(svalue,context:string);
var TF:TEXTFILE;
begin
try
AssignFile(TF,svalue '\smartcard.txt');
Rewrite(TF);
Writeln(TF,context);
closeFile(TF);
except
//MessageDlg(svalue '檔案寫入失敗',mtError,[mbYES],0);
Flag:=True;
raise Exception.Create('磁碟存取發生錯誤');
memo1.Lines.Add('磁碟機' svalue '檔案寫入失敗');
memo1.Lines.Add('==============================');
end;
end; 可是在我的自訂錯誤訊息之前會先出現title為Write.exe-寫入保護錯誤
因磁片有防寫保護而無法寫入該磁片,請將磁碟機中的磁碟區I:之防寫保
護移除,然後是取消.重試.繼續三個Button,按下其中一個button之後在
跳出自訂的錯誤畫面
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
修改您的程式如下(加入紅色的部份)
這樣即使有磁片有防寫, 也不出會出現您說的錯誤對話方塊
procedure TForm1.Write(svalue, context: string); var TF: TEXTFILE; EMode: Word; begin EMode := SetErrorMode(SEM_FAILCRITICALERRORS); try try AssignFile(TF, svalue '\smartcard.txt'); Rewrite(TF); Writeln(TF, context); closeFile(TF); except //MessageDlg(svalue '檔案寫入失敗',mtError,[mbYES],0); Flag:=True; raise Exception.Create('磁碟存取發生錯誤'); memo1.Lines.Add('磁碟機' svalue '檔案寫入失敗'); memo1.Lines.Add('=============================='); end; finally SetErrorMode(EMode); end; end;發表人 - hagar 於 2002/09/17 16:35:00 |
JS
一般會員 發表:22 回覆:26 積分:9 註冊:2002-07-20 發送簡訊給我 |
|
JS
一般會員 發表:22 回覆:26 積分:9 註冊:2002-07-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |