TAction被触发的方式是哪种?

6
有许多方法可以触发操作(TAction)的执行:快捷键、工具栏按钮、弹出菜单按钮等。是否有可能获取触发该操作的信息?我正在考虑实现活动日志来找出GUI中不同功能的最受欢迎的使用方式。
更新:
我需要收集一些统计信息,了解用户如何与应用程序GUI进行交互。为了实现日志记录,创建每个按钮的单独操作并不是最好的想法。Ulrich Gerhardt的答案似乎很合适。我可以将处理程序分配给TActionList.OnExecute事件,并从一个地方编写日志。

3
如果您想知道这一点,意味着您的设计存在问题。 - David Heffernan
3
我很钦佩你的心灵感应能力,能够识别一个未知的应用程序设计。 - Roman Yankovsky
1
如果您希望按钮按下时的行为与菜单点击不同,那就是不同的操作。 - David Heffernan
1
出于好奇,你为什么关心他们是使用菜单还是快捷键?你应该关注的是哪些操作被最频繁地调用,并确保为这些操作提供良好的键盘访问(例如快捷键)。 - David Heffernan
2
关于收集应用程序的使用统计信息,请查看DeskMetrics.com。这是一个DLL,他们有一个Delphi接口单元。 - Stuart
显示剩余16条评论
1个回答

11

也许您可以使用ActionComponent

使用ActionComponent来区分哪个客户端组件导致了此操作执行。例如,如果您需要知道是什么用户操作触发了此操作,请从OnExecute事件处理程序中检查ActionComponent。

当用户单击客户端控件时,该客户端在调用操作的Execute方法之前设置ActionComponent。操作执行后,操作将ActionComponent重置为nil(Delphi)或NULL(C ++)。

还有TApplication.OnActionExecuteTActionList.OnExecute和可能更多的“钩子”。


谢谢,我忘记了那个属性。它几乎完全满足我的需求。但是快捷键呢?在这种情况下,ActionComponent将被分配什么值? - Roman Yankovsky
快捷键并不总是绑定到组件上;Windows和/或Delphi可以为您生成它们。请解释一下您需要这个功能的原因,我们可以帮助您更好地设计应用程序。 - Jeroen Wiert Pluimers
2
很难检测到通过键盘可能调用操作的不同方式。可能是快捷键。可能是加速器。可能是通过光标/选项卡键进行导航。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接