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

請問一下各位先進有關Delphi的錯誤訊息!

尚未結案
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-16 23:02:33 IP:210.203.xxx.xxx 未訂閱
各位高手們,小弟剛學delphi一個多月了,有一個問題一直很納悶--是有關於delphi的錯誤訊息,舉個實例來說:如果我想存取floppy,可是卻沒有插磁碟片 則delphi會popup一個Debugger Exception Notification的錯誤視窗,那我是想 用自己的try...except來處理錯誤的exception,而不要delphi跳出來的錯誤視 窗,不知要如何做?謝謝!
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-16 23:15:22 IP:211.23.xxx.xxx 未訂閱
你如果將DELPHI IDE預設的錯誤訊息關閉可這樣做 Tools->Debugger Options->選Language Exception頁->將Stop On Delphi Exception的選項取消 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-16 23:28:22 IP:210.85.xxx.xxx 未訂閱
引言: 各位高手們,小弟剛學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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-17 09:31:54 IP:61.220.xxx.xxx 未訂閱
引言: 各位高手們,小弟剛學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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-17 12:48:03 IP:61.219.xxx.xxx 未訂閱
感謝各位的回應,我順便把我的程式片段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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-17 12:55:05 IP:211.20.xxx.xxx 未訂閱
可是我利用你提供的程式去執行,並不會產生你說的錯誤訊息,而是產生自定的錯誤訊息 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-17 13:13:16 IP:61.220.xxx.xxx 未訂閱
此訊息應該是你沒把磁片防寫關閉 關閉後即可 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-17 16:33:34 IP:211.22.xxx.xxx 未訂閱
修改您的程式如下(加入紅色的部份) 這樣即使有磁片有防寫, 也不出會出現您說的錯誤對話方塊
  
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-18 10:09:32 IP:61.219.xxx.xxx 未訂閱
再次感謝各位的幫忙,我發現如果RUN在WIN98上是不會有我說的問題,可是RUN在 WIN2000上就會有我說的問題.....
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-18 10:18:15 IP:61.219.xxx.xxx 未訂閱
再補充一下,在我自訂的錯誤訊息之前跳出來的Asert感覺好像是DELPHI在Compiler時自己加進來的...
系統時間:2024-04-20 20:06:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!