【问题标题】:Two column TPopupMenu to list shortcuts right aligned两列 TPopupMenu 用于列出右对齐的快捷方式
【发布时间】:2015-11-20 03:48:52
【问题描述】:

使用 Borland/CodeGear/Ebarcadero C++ Builder 2009。是否可以在 TPopupMenu 的第二列中右对齐显示快捷方式(或其他文本)?

例如:

[image] Open File        ctrl-O
[image] Close File       ctrl-W
[image] BlahBlah         ctrl-B

等等

如果是这样,怎么办? 我检查了一个项目的 break 属性,但结果并不完全是我想要的,因为项目是可以自己选择的,而不是整个行。而且画的也不是很好。

感谢您的反馈。

【问题讨论】:

    标签: c++ c++builder delphi-2009


    【解决方案1】:

    菜单项可以有一个图像(参见TMenuItem.ImageIndex 属性),并且可以分配一个快捷方式(参见TMenuItem.ShortCut 属性)。 VCL 会自动为您绘制这些元素,正如您所展示的那样。

    默认情况下,它们有点挤在一起。您可以使用TMenuItem.OnMeasureItem 事件来扩展Width

    如果您仍然不喜欢默认绘图的外观,或者您希望在右侧显示与 ShortCut 不同的文本,则您必须自己绘制菜单项(请参阅 TMenuItem.OnDrawItemTMenuItem.OnAdvancedDrawItem 事件),那么您可以让菜单项随心所欲地显示。

    【讨论】:

    • 太棒了!我不知道TMenuItem.ShortCut 属性。我在 FormKeyDown 事件中处理所有快捷方式(Form 的 KeyPreview 为 true)。快捷方式早已存在,我从不费心将它们显示为文本,现在我想这样做。如果我理解正确,VCL 现在也想执行 MenuItem 分配的快捷方式吗?这会导致冲突(未经测试)?是否有设置确保仅执行 FormKeyDown,但仍显示快捷方式文本?
    • 是的,如果你分配ShortCut,你不需要手动处理按键,VCL会为你处理快捷键调度。
    • 谢谢。有没有办法阻止 VCL 这样做,因为我只想继续使用 Form 的 KeyDown 事件。实际上,我刚刚发现:docs.embarcadero.com/products/rad_studio/radstudio2007/…(将Handled 设置为true 应该可以做到这一点)。周一进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2012-11-08
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多