Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
40
Добавлен:
30.04.2019
Размер:
2 Мб
Скачать
☆

5.1.6. Ускорители

Завершая обсуждение меню в KOL, следует дополнить информацию об ускорителях (сочетаниях клавиш), которые используются для вызова пунктов меню с клавиатуры. Эти сочетания клавиш автоматически отображаются справа от текста в меню, если для назначения их используется свойство Accelerator или ItemAccelerator[ i ]. На самом деле, просто их текст добавляется к тексту меню через символ табулятора (а уже система обеспечивает выравнивание таких дополнительных колонок после символа табуляции #9). Примечание: при желании разместить справа от текста меню в этой позиции нестандартное текстовое обозначение ускорителя, или перечислить несколько сочетаний клавиш, вызывающих то же самое действие, достаточно самостоятельно изменить текст меню, используя эту особенность меню.

Ускоритель, т.е. сочетание клавиш, может быть сформирован вызовом глобальной функции MakeAccelerator( Virt, Key ), где Virt - это сочетание флажков FSHIFT, FCONTROL, FALT, FVIRTKEY, FNOINVERT, а Key - это символ или виртуальный код клавиши.

Получить некоторый "стандартный" текст, соответствующий ускорителю, можно с помощью функции GetAcceleratorText( acc ). На самом деле, текст эта функция формирует сама, используя API-функцию GetKeyNameText. Если получившийся текст вас не устраивает, вы можете использовать свой собственный.

5.1.7. Меню в mck

Для удобного визуального проектирования меню в MCK-проектах, разработаны зеркальные компоненты TKOLMainMenu и TKOLPopupMenu. С помощью редактора этих компонентов (вызывается двойным щелчком по компоненту на форме), возможно добавить, удалить, переместить пункты меню. При выборе в отображенном дереве меню элементы, тем самым обеспечивается возможность редактировать свойства отдельных пунктов меню в Инспекторе Объектов.

Особо обращу внимание на константы, которые формирует MCK по умолчанию для пунктов меню. Это, на самом деле, очень удобное средство для обращения к пунктам меню (а обращаться к ним иногда, все-таки, приходится, например, чтобы проверить их состояние Checked). По-моему, очевидно, что строка кода

if MainMenu1.ItemChecked[ mmOptionOne ] then ...

существенно более информативна (и будет корректна даже после любых изменений в дизайне меню!), чем

if MainMenu1.ItemChecked[ 12 ] then ...

(Или, по-вашему, это не так?).

Однако, если на форме используется несколько различных компонентов меню, и пункты меню в них остались именованы N1, N2, ..., т.е. сохранились те имена, которые назначаются изначально, то при попытке откомпилировать код возникнет проблема из-за повторного определения одних и тех же констант.

Для зеркал меню в MCK имеются свойства generateConstants (по умолчанию true, т.е. - генерировать) и generateSeparatorConstants (по умолчанию - false). Второе свойство введено для того, чтобы MCK-зеркала меню не генерировали такие константы для разделителей в меню. Обычно нет необходимости именовать разделители, хотя встречается ситуация, когда необходимо обратиться к свойствам пункта-разделителя (например, к его свойству видимости Visible).

Вы может так же отключить и генерацию констант для прочих пунктов, но если к свойствам пунктов меню требуется обращаться в динамике, то лучше их все-таки просто переименовать.