加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

有没有办法记录Delphi中的每个gui事件?

发布时间:2020-12-15 10:05:10 所属栏目:大数据 来源:网络整理
导读:Delphi调试器非常适用于调试线性代码,其中一个函数以可预测的线性方式调用其他函数,我们可以一行一步地遍历程序. 当处理事件驱动的gui代码时,我发现调试器不太有用,其中单行代码可能会导致触发新的事件,这可能反过来触发其他事件. 在这种情况下,“通过代码”
Delphi调试器非常适用于调试线性代码,其中一个函数以可预测的线性方式调用其他函数,我们可以一行一步地遍历程序.

当处理事件驱动的gui代码时,我发现调试器不太有用,其中单行代码可能会导致触发新的事件,这可能反过来触发其他事件.
在这种情况下,“通过代码”的方法不会让我看到发生的一切.

我通常解决这个问题的方法是1)猜测哪些事件可能是问题的一部分,然后2)添加断点或记录到每个这些事件.

问题是这种方法是偶然的和耗时的.

是否有一个开关我可以在调试器中弹出来说“记录所有gui事件”?或者有一些代码可以添加到陷阱事件,像

procedure GuiEventCalled(ev:Event)
begin
    log(ev);
    ev.call();
end

我正在寻找的最终结果是这样的(例如):

FieldA.KeyDown 
FieldA.KeyPress 
FieldA.OnChange 
FieldA.OnExit 
FieldB.OnEnter

这样可以把所有的猜测都从Delphi gui调试开始.

我使用的是Delphi 2010

[编辑]
几个答案建议拦截或记录Windows消息的方法.其他人则指出,并不是所有的Delphi事件都是Windows消息.我认为是我正在询问的这些类型的“非Windows消息”事件;由Delphi代码创建的事件. [/编辑]

[EDIT2]
在阅读了这里的所有信息后,我有一个想法,使用RTTI动态拦截TNotifyEvents并将其记录到“调试”窗口中的事件日志中.这包括OnEnter,OnExit,OnChange,OnClick,OnMouseEnter,OnMouseLeave事件.经过一点黑客之后,我得到了它的工作相当不错,至少对我的使用(它不记录关键事件,但可以添加).
我已经发布了代码here

要使用

>下载EventInterceptor Unit并将其添加到您的项目中
>将EventInterceptor单位添加到Uses子句
>在您要跟踪的每个表单的代码中添加此行.

AddEventInterceptors(MyForm的);

打开调试器窗口,任何被调用的事件将被记录到事件日志中

[/ EDIT2]

解决方法

使用我写的 download here的“delphieventlogger”单元.它只是一种方法调用,非常容易使用.它将所有TNotifyEvent(例如OnChange,OnEnter,OnExit)记录到调试器窗口中的Delphi事件日志中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读