【问题标题】:Which way that TAction has been fired?TAction 以哪种方式被解雇了?
【发布时间】:2011-03-31 14:03:10
【问题描述】:

用户可以通过多种方式触发动作 (TAction) 执行:快捷键、工具栏按钮、弹出菜单按钮等。是否可以获取信息如何触发该动作?

我只是在考虑实现活动日志,以找出在 GUI 中使用不同功能的最流行方法。

更新

我需要收集一些关于用户如何与应用程序 GUI 交互的统计信息。

仅仅因为您需要实现日志记录,就为每个按钮创建一个单独的操作并不是最好的主意。 Ulrich Gerhardt 的回答看起来很合适。我可以为 TActionList.OnExecute 事件分配一个处理程序并从一个地方写入日志。

【问题讨论】:

  • 如果你想知道这个你的设计就坏了
  • 我钦佩你识别未知应用程序设计的心灵感应能力。
  • 如果您希望按下按钮的行为与单击菜单的行为不同,那就是不同的操作。
  • 出于兴趣,你为什么关心他们是使用菜单还是快捷方式?您应该寻找最常调用哪些操作,并确保您为这些操作提供良好的键盘访问(例如快捷方式)。
  • 关于为您的应用收集使用情况统计信息,请查看DeskMetrics.com。这是一个 DLL,他们有一个 Delphi 接口单元。

标签: delphi


【解决方案1】:

也许你可以使用ActionComponent:

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

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

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

【讨论】:

  • 谢谢,我忘记了那个属性。它几乎完全符合我的需求。但是快捷键呢?在这种情况下,将为 ActionComponent 分配什么值?
  • 快捷键并不总是绑定到组件; Windows 和/或 Delphi 可以为您生成它们。向我们解释您为什么需要这个,我们可以帮助您以更好的方式设计您的应用程序。
  • 很难检测到键盘调用动作的不同方式。可能是捷径。可能是加速器。可以通过光标/tab键导航。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2018-11-04
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多