【问题标题】:Implement clipboard operations via menu通过菜单实现剪贴板操作
【发布时间】: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 事件可用于根据需要分配操作的 VisibleEnabled 属性(从而相应地更新其关联的菜单项)...
  • ... 例如,复制和剪切操作可以根据目标控件的当前选择(或缺少)启用/禁用自身,粘贴操作可以根据目标控件的当前选择启用/禁用自身剪贴板的当前内容(参见 FMX 的 IFMXClipboardServiceIFMXExtendedClipboardService 平台服务)。
  • @RemyLebeau 在您的 cmets 的帮助下,我能够对剪切、复制和粘贴菜单项进行编程。将我的注意力吸引到 TAction.OnUpdate 事件非常有帮助,因为我之前没有意识到该事件的目的。如果您发布您的 cmets 作为答案,我会接受。

标签: delphi firemonkey firemonkey-fm3 firemonkey-fm2


【解决方案1】:

您可以从 Embarcadero 阅读有关使用 FMX 进行复制/剪切/粘贴的信息:
Multi-Device Apps and Clipboard Support

因为您现在的问题是关于 Windows,所以您应该了解 Windows 剪贴板的内部结构。好的开始是 Zarko Gajic 的文章:
Basic Clipboard Operations (Cut/Copy/Paste)

还有关于收听剪贴板以接收有关剪贴板内容更改的通知:
Listening to the Clipboard: Clipboard Delphi Spy with Custom Clipboard Formats

另一篇关于在 OS X 和 Windows 中使用 FMX 剪贴板的好文章:
Copying and pasting the contents of a FireMonkey TBitmap

【讨论】:

  • 当您使用它时,请参阅 Embarcadero 论坛上的 this discussion,了解使用 FMX 在 Windows 上收听剪贴板更改的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 2016-09-08
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2013-12-19
相关资源
最近更新 更多