【发布时间】:2017-08-21 23:54:03
【问题描述】:
我正在开发我的第一个商业 Firemonkey 应用程序(也是我的第一个任何语言的商业应用程序)。我使用了本机 FMX 控件以及来自 TMSSoftware (TTMSFMXGrid) 的一个控件。键盘剪贴板操作——Ctrl+X、Ctrl+C、Ctrl+V——“开箱即用”。但我希望我的应用程序能够提供与键盘快捷键功能相同的菜单项。
我已经设置了我的程序,以便在为 Windows 编译时可以看到一个 TMenuBar。为 OS X 编译时,TMenuBar 是不可见的,但会出现 TMainMenu。为简单起见,我们可以只讨论 TMenuBar 可见时为 Windows 编译的场景。
很容易对TMenuBar 的TMenuItems 进行编程来执行剪切、复制和粘贴操作。这不是问题。我一直无法弄清楚如何在未选择任何内容(或没有相关内容)时禁用剪切和复制菜单项,以及如何在剪贴板上没有任何内容(或没有相关内容)时禁用粘贴。
我该怎么做?
(我使用的是 Berlin 10.1 Update 2。)
【问题讨论】:
-
我会为此使用
TActionList,其中每个菜单项都从列表中分配一个TAction对象(您可以让TMenuBar项目和TMainMenu项目共享相同的行动)。TAction.OnUpdate事件可用于根据需要分配操作的Visible或Enabled属性(从而相应地更新其关联的菜单项)... -
... 例如,复制和剪切操作可以根据目标控件的当前选择(或缺少)启用/禁用自身,粘贴操作可以根据目标控件的当前选择启用/禁用自身剪贴板的当前内容(参见 FMX 的
IFMXClipboardService和IFMXExtendedClipboardService平台服务)。 -
@RemyLebeau 在您的 cmets 的帮助下,我能够对剪切、复制和粘贴菜单项进行编程。将我的注意力吸引到 TAction.OnUpdate 事件非常有帮助,因为我之前没有意识到该事件的目的。如果您发布您的 cmets 作为答案,我会接受。
标签: delphi firemonkey firemonkey-fm3 firemonkey-fm2