2015-11-20 62 views
0

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

例如:

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

如果是这样,怎么样? 我检查了项目上的break属性,但结果并不完全符合我的要求,因为项目可以单独选择,而不是完整的行。也没有很好地画出来。

您的反馈赞赏。

回答

1

菜单项可以有一个图像(请参阅TMenuItem.ImageIndex属性),并且可以分配一个快捷方式(请参阅TMenuItem.ShortCut属性)。 VCL将自动为您绘制这些元素,完全如您所示。

menu1

默认情况下,他们都有点压扁在一起。您可以使用TMenuItem.OnMeasureItem事件延长Width

menu2

如果你还是不喜欢画的样子默认,或者你想不同的文本比ShortCut出现在右侧,你会必须自己主动绘制菜单项(请参阅TMenuItem.OnDrawItemTMenuItem.OnAdvancedDrawItem事件),然后可以使菜单项出现,但是您需要。

+0

太棒了!我不知道'TMenuItem.ShortCut'属性。我处理FormKeyDown事件中的所有快捷方式(表单的KeyPreview为true)。快捷键很长,我从来没有打算把它们显示为文本,现在我想这样做。如果我理解正确,VCL现在也想要执行MenuItem分配的快捷键了?这会导致冲突(未经测试)?是否有一个设置来确保只执行FormKeyDown,但快捷方式文本仍然显示? – Peter

+0

是的,如果您指定了“ShortCut”,则无需手动处理键击,VCL将为您处理快捷分派。 –

+0

谢谢。有没有办法阻止VCL这样做,因为我只想继续使用Form的KeyDown事件。其实,我刚刚发现:http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/delphivclwin32/AppEvnts_TApplicationEvents_OnShortCut.html(将'Handled'设置为'true'应该这样做)。星期一进行测试。 – Peter