接管程序的OnException?接管窗体的OnException?

gouxiaoyu 2010-06-19 09:43:36
接管整个应用程序的写法是这样的:application.OnException := MyException

有没有办法截获当前窗体抛出的异常?

...全文
102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gouxiaoyu 2010-07-08
  • 打赏
  • 举报
回复
感谢了!
SQLDebug_Fan 2010-07-06
  • 打赏
  • 举报
回复
有一个解决办法就是得到发生异常的类名,参考一下FastMM抓异常的代码,首先是抓到出异常的堆栈,获取堆栈异常地址的代码是:

procedure GetStackAddress(var AStackTop, AStackBottom: Cardinal);
begin
asm
mov ecx, FS:[4]; //FS:[4]放置发生异常时的栈信息
sub ecx, 3;
mov [eax], eax; //栈顶,eax接收第一个参数
mov [edx], ebp; //栈低,edx接收第二个参数
end;
end;

具体的可以参考FastMM
SQLDebug_Fan 2010-07-06
  • 打赏
  • 举报
回复
接管窗体的OnException是无法实现的,你接管Application.OnException是因为发生异常就会触发哪个事件,而且从技术上来说,也无法判断发生的异常是属于哪个窗体的。
starluck 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 gouxiaoyu 的回复:]
接管整个应用程序的写法是这样的:application.OnException := MyException

有没有办法截获当前窗体抛出的异常?
[/Quote]

这个是 Application的。

你可以在写入的时候, 判断下 ActiveForm
weiqiy 2010-07-05
  • 打赏
  • 举报
回复
可以通过判断消息的来源实现
亮剑_ 2010-07-05
  • 打赏
  • 举报
回复
窗体没有直接的OnException事件,只能按过程/函数自行try..except
lantianhf 2010-07-05
  • 打赏
  • 举报
回复
这是什么啊,没看到过。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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