有难度的捕捉异常问题

肥仔胧 2007-02-12 11:57:43
application.onException 可以捕捉到raise的提示框异常信息,读取过来,
但是我怎么才能捕捉到类似showmessage('hehe')的提示框信息
如:
try

except
on e: Excetpion do
showmessage(e.message);
end;
如何把e.message读取到我们要显示的Edit1中呢?
...全文
888 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunniness 2007-02-14
  • 打赏
  • 举报
回复
delphi有个自带的控件,可以捕获所有异常
Sunniness 2007-02-14
  • 打赏
  • 举报
回复
baseyueliang 2007-02-13
  • 打赏
  • 举报
回复
替换单元文件Dialogs,用自己的ShowMessage
lihuasoft 2007-02-13
  • 打赏
  • 举报
回复
终于明白了.....你不是要读异常信息,而是要读ShowMessage模式窗口的内容......
lihuasoft 2007-02-13
  • 打赏
  • 举报
回复
汗.... 我上面的代码就是把所有的异常都显示到主窗体的Edit里去....你试一下吧...或许与你想要的实现方式不一样...
肥仔胧 2007-02-13
  • 打赏
  • 举报
回复
楼上的,好像还不明白我的意思吧,我也不明白,你写的意图,谢谢先
yrb 2007-02-13
  • 打赏
  • 举报
回复
如果你要捕捉ShowMessage的输出,你需要勾上MessageBox这个api,这已经不是异常捕捉的问题了。
yrb 2007-02-13
  • 打赏
  • 举报
回复
然后每次要我只要
try

except
//raise Exception.create('msg');//这里Edit1.text 自然会显示msg,
//如果用 on e: Exception do
// showmessage(e.message); 则不能自动显示到Edit1上

on e: Exception do
begin
showmessage(e.message);
raise;
end;
end;
torworx 2007-02-13
  • 打赏
  • 举报
回复
ShowMessage窗口弹出来的东西可不是 Exception 哦,只是个提示而已,无法捕捉。
Almzg_0 2007-02-13
  • 打赏
  • 举报
回复
procedure TForm1.ErrException(Sender: TObject; E: Exception);
begin
Edit1.Text := E.Message;
end;

constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
Application.OnException := ErrException;
end;

也不一定是ShowMessage的对话框,根源是 e:exception
==================================================
楼主,你这不已经实现了么?
广州接入 2007-02-13
  • 打赏
  • 举报
回复
楼主的问题不是捕捉异常,而是捕捉对话框信息.可以考虑baseyueliang的方法,并用消息来实现信息的传递.
hulose 2007-02-13
  • 打赏
  • 举报
回复
看到楼主的问题 我感觉到中国的软件业为什么是这个样了

异常都被你拦掉处理了 你又不向上再复抛一次 application的onExcept 哪来的处发呀
StealDream 2007-02-13
  • 打赏
  • 举报
回复
还是“有难度的捕捉异常问题”
真不知道你对异常究竟了解多少,居然问得出这种问题
woolgate 2007-02-13
  • 打赏
  • 举报
回复
尽量不要动Dialogs文件,直接application.onexception就可以了,太刁钻的exception比如runtime error之类的就别on了,自己逮不住,就让windows处理算了
zuoansuifeng 2007-02-12
  • 打赏
  • 举报
回复
... 楼上淫阿
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
楼主的代码没有错。可能你没有脱离Delphi运行Exe并触发了异常的缘故。

var I : integer;
begin
try
I := StrToInt('a');
Edit1.text := 'No Error';
except
on E : Exception do
Edit1.Text := E.Message;
end;
end;
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
把下面的代码复制过去试一下。注意,编译后,脱离Delphi环境运行exe文件。

procedure TForm1.Button3Click(Sender: TObject);
var i : integer;
begin
try
i := strtoint('a');
showmessage('no error');
except
on e: Exception do
showmessage(e.message);
end;
end;
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
if E.Message = '' then
; <------------------------去掉这个分号
else
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
现学现卖了:

请问楼主要的,是下面这样吗?

......
{ Private declarations }
public
{ Public declarations }
procedure TryExcepts(Sender: TObject; E: Exception);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TryExcepts(Sender: TObject; E: Exception);
begin
if E.Message = '' then
;
else
Edit1.Text := E.Message;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := TryExcepts;
end;

procedure TForm1.Button1Click(Sender: TObject);//测试 1
var
I : integer;
begin
I := StrToInt('a');
end;

procedure TForm1.Button2Click(Sender: TObject);//测试2
var
I : integer;
S : TStringList;
begin
S := TStringList.Create;
S.Text := 'line1' + #10 + 'line2' + #10 +'line3' + #10 +'line4';
for I := 0 to 5 do
showmessage(S[I]);// 5 越界
S.Free;
end;
肥仔胧 2007-02-12
  • 打赏
  • 举报
回复
也不一定是ShowMessage的对话框,根源是 e:exception
加载更多回复(4)

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧