Разделы меню Влево, По центру и Вправо, выравнивающие текущий абзац, взаимоисключающие. Поэтому они объединены в одну группу с одинаковым отличным от нуля значением Grouplndex и значение Checked установлено в true у раздела Влево. То есть по умолчанию выравнивание производится влево.

При выборе пользователем команды Сервис | Меню вызывается диалоговое окно, показанное на рис. 8.2. Имя формы этого окна - FMSetup. В левой групповой панели Меню расположен компонент списка с индикаторами CheckListBox, названный в программе ChLBMenu. В него заносится список меню, имеющихся в главном окне. Индикаторы позволяют пользователю сделать видимым или невидимым каждое из этих меню. В метке Описание (ее имя StaticTextl), помещенной ниже списка меню, появляется описание того меню, которое выделено пользователем в данном окне. Еще ниже в окне редактирования Надпись (имя Editl) содержится надпись головного раздела выделенного меню с учетом амперсанда, указывающего клавишу быстрого доступа. Эту надпись пользователь может изменить, и новая надпись присвоится данному меню.

Рис. 8.2

Окно настройки меню приложения Menu

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

Центральная групповая панель Разделы окна рис. 8.2 содержит компонент ListBox (имя LBRazd), который отображает список разделов, включенных в то меню, которое выделено пользователем в ChLBMenu. При выделении пользователем в LBRazd того или иного раздела, информация об этом разделе отображается в расположенной ниже метке Описание (ее имя StaticText2), a надпись с учетом амперсанда - в расположенном еще ниже окне Надпись (имя Edit2). Эту надпись пользователь может изменить. В левом нижнем углу окна расположен компонент HotKeyl, отображающий горячие клавиши, соответствующие выделенному в LBRazd разделу. Пользователь может изменить эти горячие клавиши или присвоить горячие клавиши разделу меню, ранее их не имевшему. Нажатие кнопки Применить фиксирует это изменение.

Расположенные на панели Разделы кнопки со стрелками позволяют перемещать выделенный раздел вверх или вниз, изменяя тем самым последовательность разделов выделенного меню.

Когда фокус находится в окне LBRazd, пользователь может нажать клавишу Delete, и выделенный в окне раздел меню удалится. Исключение составляют разделители, которые удалять не разрешается.

Правая панель Команды содержит компонент ListBox (имя LBComand), который отображает полный список действий, определенных в приложении. В отличие от списков ChLBMenu и LBRazd, в списке LBComand введено упорядочивание по алфавиту (свойство Sorted установлено в true), чтобы облегчить пользователю поиск нужного действия. В списках ChLBMenu и LBRazd этого не делалось, поскольку в них последовательность отображения должна соответствовать последовательности расположения разделов в меню.

При выделении пользователем в LBRazd того или иного раздела, информация об этом разделе отображается в расположенной ниже метке Описание (имя Static-Text3). Нажатие кнопки Добавить добавляет раздел, выделенный в окне LBComand, в меню, выделенное в окне ChLBMenu, в позицию перед элементом, выделенным в LBRazd. Впрочем, вставить в меню можно только раздел, который в данный момент не включен ни в одно меню. В противном случае появится окно с текстом: "Раздел уже имеется в меню .... Сначала его надо оттуда удалить". Так что, например, разделы выравнивания абзаца, которые, как видно из приведенной выше таблицы, не включены ни в одно меню, можно добавить в любое меню, например, в Формат. А для перемещения раздела из одного меню в другое, надо сначала удалить его из меню, а затем добавить в другое меню.

Кнопка Закрыть фиксирует все произведенные изменения меню и закрывает окно. Кнопка Отменить закрывает окно, отменяя все произведенные изменения. В этой кнопке установлено в true свойство Cancel. Так что она срабатывает и при нажатии пользователем клавиши Esc.

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

Таким образом, с помощью окна настройки меню пользователь может делать следующие операции:

s управлять видимостью отдельных меню

s изменять надписи меню и разделов, включая изменение клавиш быстрого доступа

s вводить и изменять "горячие" клавиши разделов меню

® добавлять в меню новые разделы из числа предусмотренных разработчиком

• удалять разделы меню

* переносить разделы из одного меню в другое

В последующих разделах будет рассмотрена реализация всех этих возможностей. Но сначала остановимся еще на одном вопросе. Помимо форм Forml и FMSetup в приложении есть еще две формы: FPSetup - окно настройки инструментальных панелей, вызываемое по команде Сервис | Панели, и FOptions - окно задания параметров, вызываемое по команде Сервис | Параметры. Эти формы будут рассмотрены далее в разд. 8.3.1, 8.3.2 и 8.5.3. А сейчас надо отметить одно обстоятельство. Как будет видно из дальнейшего, определенные действия по настройке форм Forml, FPSetup и FOptions производятся в момент создания формы FMSetup. Следовательно, к этому моменту все остальные формы уже должны быть созданы. Поэтому надо позаботиться о том, чтобы форма FMSetup создавалась последней.

Последовательность создания форм приложения определяется последовательностью вызовов Application.CreateForm в головном файле программы, открываемом в среде Delphi командой Project | View Source. Для рассматриваемого примера выполняемые операторы этого файла следующие:

Application.Initialize;
Application.HelpFile := 'Menu.hip1;
Application.CreateForm(TForml, Forml);
Application.CreateForm(TFPSetup, FPSetup);
Application.CreateForm(TFOptions, FOptions);
Application.CreateForm(TFMSetup, FMSetup);
Application.Run;

Таким образом, последовательность создания форм следующая: Forml, FPSetup, FOptions, FMSetup. При необходимости можно изменить последовательность создания форм, просто переставив в этом файле соответствующие операторы Application.CreateForm. Но более удобно и безопасно делать это командой Project | Options. В открывающемся диалоговом окне надо перейти на страницу Forms, удостовериться на ней, что форма Forml является главной, и установить нужную последовательность создания форм, просто перетаскивая мышью строки в списке Auto-create forms на нужное место.

8.1 Программное управление меню || Оглавление || 8.2.2 Алгоритмы настройки


⇐ Предыдущая страница|

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



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

  • Февраль
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс