如果做过“把主菜单放到工具栏里”的兄弟们都会发现一个问题:那就是系统会自动给菜单选项加上热键(如果你的菜单选项是英文,那么会在第一个字母下加横线,如果你的菜单选项是中文,那么会在菜单选项的后面加上类似(Y)、(Z)的快捷键),而使你自己定义的快捷键失效!(注:我后来发现,如果自己加的是类似(H)的快捷键时,就不会出现这样的问题。而只有当我们加的是类似Ctrl+A,F1,Ctrl+Alt+D等的快捷键时才会出现问题;另外当为TMainMenu设置了Images属性后,也就是说给菜单项加了图片,英文菜单的问题会消失,但中文菜单的问题依然存在。这其中的原因,我也搞不清楚)。即使我们设置mainMenu的AutoHotkeys=maManual也解决不了。
当初我在遇到这个问题后,一筹莫展,只好向高手们请教。后来在BCB_FANS和JSP两位老大的帮助下,才解决问题。因此,这篇文章实际上是整理的两位老大的方法。
首先,让我们去掉系统自动加的热键。
当我们把菜单放到工具栏里后,我们在程序运行时看到的菜单其实不是我们在设计时加的TMainMenu,而是系统临时new的一个TPopupMenu,而这个临时的菜单的AutoHotkeys属性默认为maAutomatic,所以就会给菜单自动加上热键。这个问题是BCB_FANS发现的(我不可能有这么厉害,呵呵),他的原话是这样的:
“实际上显示菜单的时候,TToolBar并不是使用原来已经设计好的菜单了,而是重新建立一个临时的TPopupMenu,并把原来的那个菜单的菜单项添加到这个TPopupMenu当中,最后才显示这个临时的TPopupMenu。这个TPopupMenu的AutoHotkeys为maAutomatical,并且没有任何方式可以控制这个临时的TPopupMenu的属性。所以显示出来的菜单都会自动添加快捷字符。”