8.2.1 Описание примера

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

Такие возможности иллюстрируются проектом Menu, имеющемся в каталоге Menu на приложенном к книге диске. Рассмотрим ту часть этого проекта, которая связана с настройкой меню пользователем.

На рис. 8.1 показано главное окно приложения Menu. Приложение имитирует текстовый редактор на основе компонента RichEdit. Именно имитирует, поскольку, чтобы не усложнять код, ряд команд, вызываемых разделами меню и быстрыми кнопками, не реализован. Они просто выдают сообщения, какая именно команда выполняется. А полноценная реализация текстового редактора рассмотрена в разделах гл. 5.

8.2 Настройка меню пользователем

На форме главного окна (ее имя в приложении - Forml), помимо ряда других компонентов, расположен компонент ActionListl, в котором сформировано множество действий, предусмотренных в приложении. С компонентом ActionListl связан список изображений ImageListl. Главное меню реализуется компонентом Main Menu 1, разделы которого ссылаются на список действий ActionListl.

Список действий содержит следующие действия, на которые ссылаются соответствующие разделы меню:

Действие

Меню

Раздел

Описание

ANew

Файл

Создать

Создает новый документ (не реализован) |

АОреп

Открыть

Открывает текстовый файл и загружает его в окно редактирования

Авауе

Сохранить

Сохраняет в текстовом файле текст из окна редактирования (не реализован)

АваувАв

Сохранить как...

Сохраняет в указанном текстовом файле текст из окна редактирования (не реализован)

APreview

Предварительный просмотр

Предварительный просмотр документа перед печатью (не реализован)

АРгіїгі

Печать

Печать документа

АРгіїиегЗеїир

Установка принтера

Установка параметров принтера

АЕхИ

Выход

Завершает работу приложения

Аипёо

Правка

Отменить

Отменить последнюю команду редактирования

АСиї

Вырезать

Вырезать выделенный текст в буфер обмена

АСору

Копировать

Копировать выделенный текст в буфер обмена

АРавіе

Вставить

Вставить текст из буфера обмена

АПпё

Найти

Найти текст (не реализован)

АНерІасе

Заменить

Заменить текст (не реализован)

АРоігі

Формат

Шрифт

Выбор шрифта

АЬеЇЇ

Влево

Выровнять абзац влево

АСеїгіег

По центру

Выровнять абзац по центру

Вправо

Выровнять абзац вправо

АВиІ

Список

Форматировать абзац как список

АВоЫ

-

-

Полужирный шрифт

АНаїіс

-

-

Шрифт курсив

А_

-

-

Шрифт подчеркнутый

АОрИопв

Сервис

Параметры

Настройка параметров

АМепи

Меню

Настройка меню

АРапеІв

Панели

Настройка панелей

ААггапде-

ісопб

Окно

(невидимо)

Упорядочить значки

Упорядочить значки окон документов (не реализован)

АСавсасІе

Каскад

Упорядочить каскадом (не реализован)

Действие

Меню

Раздел

Описание

ATileHorizon-tally

По горизонтали

Упорядочить по горизонтали (не реализован)

ATileVertically

По вертикали

Упорядочить по вертикали (не реализован)

ACallHelp

?

Вызов справки

Вызов справки приложения

AAbout

О программе

Информация о программе (не реализован)

Как видно из приведенной таблицы, не все действия включены в меню. В частности, не включены разделы, связанные с форматированием текста: ABold, Altalic и А_. Но пользователь, при желании, может включить эти разделы в меню во время выполнения. Кроме того, в меню имеются разделы, не связанные с объявленными действиями. Это разделы последних открывавшихся файлов, включаемые программно в конец меню Файл. Способы включения подобных разделов в меню Файл рассмотрены в разд. 5.2.4, в гл. 5. Меню Окно, конечно, в подобном приложении не нужно. Оно применяется в приложениях MDI. Поэтому меню Окно сделано по умолчанию невидимым. Но оно все-таки включено в данное тестовое приложение, чтобы дать пользователю больший простор для реорганизации и настройки меню и инструментальных панелей.


|Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс