Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi.pdf
Скачиваний:
191
Добавлен:
24.02.2016
Размер:
6.84 Mб
Скачать

Рисунок 8.15. Меню работающей программы. Некоторые пункты недоступны.

В самом начале работы отдельные пункты выпадающих меню File и View недоступны. Они становятся доступными после выбора команды File | Open..., а после выбора команды File | Close — снова недоступными.

Итак, вы изучили все основные аспекты программирования главного меню, поэтому перейдем к вопросу разработки контекстных меню.

8.1.11. Контекстное меню

Контекстное (вспомогательное) меню представлено в среде Delphi

компонентом PopupMenu (рисунок 8.16). Отыщите его в палитре компонентов на вкладке Standard и поместите на форму. Дайте новому компоненту имя PopupMenu.

Рисунок 8.16. Компонент PopupMenu

Прежде, чем перейти к практическому использованию контекстных меню, кратко опишем отличительные свойства компонента PopupMenu (таблица

8.4).

352

Свойство

Alignment

AutoHotkeys

Описание

Определяет место появления меню относительно указателя мыши: paLeft — левый верхний угол меню совпадает с позицией курсора мыши; paCenter — середина верхнего края меню совпадает с позицией курсора мыши; paRight — правый верхний угол меню совпадает с позицией курсора мыши.

Значение maAutomatic избавляет программиста от необходимости назначать пунктам меню "горячие" клавиши (с помощью специального символа & в тексте пунктов); компонент автоматически подбирает "горячие" клавиши. Значение maManual требует, чтобы "горячие" клавиши назначил программист (см. параграф 8.1.3).

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

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

Если равно значению True, то меню появляется автоматически по нажатию AutoPopup правой кнопки мыши. Если равно значению False, то меню необходимо

отображать программно.

Список значков, отображаемых рядом с пунктами меню. Свойство Images Images используется совместно со свойством ImageIndex компонентов MenuItem (см.

параграф 8.1.12).

Items

MenuAnimation

OwnerDraw

Обеспечивает нумерованный доступ к пунктам меню.

Набор флажков, определяющих способ появления меню на экране: maLeftToRight — слева направо, maRightToLeft — справа налево, maTopToBottom — сверху вниз, maBottomToTop — снизу вверх, maNone

мгновенное отображение. Чтобы флажки начали работать, запустите программу настройки экрана (Start–>Settings–>Control Panel–>Display) и на вкладке Effects

выберите способ появления меню и подсказок — Scroll Effect.

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

OnMeasureItem и OnDrawItem. Событие OnMeasureItem происходит в пункте меню, когда расчитываются размеры пункта. Событие OnDrawItem происходит в пункте меню, когда пункт рисуется на экране. Если свойство OwnerDraw равно значению False, то пукнты меню имеют стандартный вид и события

OnMeasureItem и OnDrawItem не происходят.

TrackButton

OnChange

OnPopup

Кнопка мыши для выбора пункта меню: tbLeftButton — левая кнопка, tbRightButton — еще и правая кнопка.

Происходит при изменении структуры меню. Происходит при вызове меню пользователем.

Таблица 8.4. Важнейшие свойства и события компонента PopupMenu

Шаг 18. Контекстное меню наполняется пунктами, как и главное меню, в дизайнере меню. Двойным щелчком мыши на компоненте PopupMenu откройте окно констурктора меню и, используя уже известные вам приемы,

353

добавьте в меню пункты Half Size (с идентификатором HalfSizePopupItem),

Normal Size (с идентификатором NormalSizePopupItem) and Double Size

идентификатором DoubleSizePopupItem). Во всех пунктах контекстного меню установите следующие свойства:

Enabled = False

GroupIndex = 1

RadioItem = True

Кроме этого пометьте пункт Normal Size, установив в нем свойство Checked в значение True. Таким образом, команды всплывающего меню дублируют некоторые команды главного меню, обеспечивая пользователю дополнительные удобства (рисунок 8.17).

Рисунок 8.17. Команды контекстного меню

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

Шаг 19. Активизируйте в дизайнере меню пункт Half Size и выберите в окне свойств вкладку Events. Выберите обработчик HalfSizeMenuItemClick из раскрывающегося списка события OnClick. То же самое проделайте с пунктами Normal Size и Double Size, установив для них обработчики

354

NormalSizeMenuItemClick и DoubleSizeMenuItemClick соответственно

(рисунок 8.18).

Рисунок 8.18. Установка обработчиков команд контекстного меню

Шаг 20. Для синхронной работы главного и контекстного меню нужно еще подправить некоторые обработчики:

procedure TPictureForm.HalfSizeMenuItemClick(Sender: TObject); begin

// Показать рисунок половинного размера

HalfSizeMenuItem.Checked := True;

HalfSizePopupItem.Checked := True; end;

procedure TPictureForm.NormalSizeMenuItemClick(Sender: TObject); begin

// Показать рисунок нормального размера

NormalSizeMenuItem.Checked := True;

NormalSizePopupItem.Checked := True; end;

procedure TPictureForm.DoubleSizeMenuItemClick(Sender: TObject); begin

// Показать рисунок двойного размера

DoubleSizeMenuItem.Checked := True;

DoubleSizePopupItem.Checked := True; end;

procedure TPictureForm.EnableCommands(Enable: Boolean); begin

SaveAsMenuItem.Enabled := Enable;

355

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]