2015-11-20 2 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.OnDrawItem и TMenuItem.OnAdvancedDrawItem), затем вы можете сделать пункты меню, как вы хотите.

+0

Отлично! Я не знал о свойстве TMenuItem.ShortCut. Я обрабатываю все ярлыки в событии FormKeyDown (KeyPreview формы является истинным). Ярлыки надолго, я никогда не удосужился отображать их как текст, теперь я хочу это сделать. Если я правильно понял, VCL теперь захочет также выполнить назначенные ярлыки MenuItem? Это приведет к конфликтам (не проверено)? Есть ли параметр, обеспечивающий выполнение только FormKeyDown, но текст ярлыка остается отображаемым? – Peter

+0

Да, если вы назначаете «ShortCut», вам не нужно вручную обрабатывать нажатия клавиш, VCL будет обрабатывать диспетчерский ярлык для вас. –

+0

Спасибо. Есть ли способ остановить выполнение VCL, поскольку я бы просто продолжал использовать событие KeyDown формы. Фактически, я только что нашел: http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/delphivclwin32/AppEvnts_TApplicationEvents_OnShortCut.html (установка 'Handled' на' true' должна делать именно это). Для тестирования в понедельник. – Peter