Создание приложения с организацией главного и контекстного меню




Создание приложения с организацией главного и контекстного меню

Цель: приобретение навыков работы с компонентом MainMenu и PopupMenu. Изучение и закрепление на практике основ конструирования структуры меню и связывания его с действиями в Delphi-проектах

Теоретические сведения

Меню – один из распространенных элементов пользовательского интерфейса. Меню представляет собой список пунктов, объединенных по функциональному признаку, каждый из которых обозначает команду или вложенное меню (подменю).

Главное меню располагается в верхней части формы под ее заголовком и содержит наиболее общие команды приложения. В Delphi главное меню представлено компонентом MainMenu.

Главное меню. Проект может содержать несколько главных меню, но отображается на форме только одно, которое указано в свойстве Menu формы. Для создания меню необходимо на странице Standard мышью выбрать пиктограмму данного компонента

, а затем щелкнуть левой клавишей мыши (ЛКМ) по самой форме.

Для наполнения меню командами и опциями надо двойном щелчком ЛКМ по пиктограмме компонента активизировать редактор MenuDesigner. Аналогичный результат достигается через контекстное меню, активизируемое правой клавишей мыши (ПКМ), после чего через опцию запускается MenuDesigner. Также можно активизировать кнопку

... в свойстве Items ОИО.

В результате появляется новое окошко <название формы>.MainMenu1, в котором появляется поле для ввода опции меню. Текст опции вводится в свойство Caption окна инспектора объектов (ОИО). После нажатия Enter введенный текст появляется в окошке. А само окошко сдвигается вправо.

Для создания выпадающих опций надо щелкнуть мышью ниже пунктирной рамки. А дальше они будут создаваться ниже сами.

Третий уровень иерархии создается уходом вправо от выпадающих опций. Для этого надо нажать Ctrl/→. Можно также щелкнуть ПКМ по подопции и в контекстном меню выбрать команду Create Submenu. А далее следовать этой же процедуре.

Символ & перед каким-либо символом в опции делает последний "горячим", т.е. эту опцию можно будет выбирать сочетанием клавиш Alt/<символ>.

Для создания разделительной линии в списке опций надо в него ввести "-".

Каждый элемент меню является объектом класса TMenuItem и нумеруется по системе N<номер>. Свойства этих объектов представлены в таблице.

Список TImageList содержит набор картинок для размещения справа от опций меню. Проектировщик может выбрать картинку из этой галереи или использовать отдельный графический файл, указав его в свойстве Bitmap.

Для элементов меню задано только одно событие - OnClick. Переход к листингу обработчика этого события выполняется двойной щелчок ЛКМ.

Свойство Его назначение
Bitmap: TBitmap Содержит ссылку на связанное с опцией изображение. Оно появляется слева от опции, если не установлено свойство ImageIndex.
Break: TMenuBreak Позволяет создавать многоколоночные списки. Возможные значения: mbNone, mbBreak (заканчивает предыдущий столбец и начинает новый), mb BarBreak (делает тоже и добавляет вертикальную черту).
Checked: Boolean При установке значения True справа от опции появляется галочка Ö.
Count: Integer Содержит количество подопций в подчиненном меню
ShortOut: TShortCut Задает клавиши быстрого выбора для данной опции
Default: boolean Выбираемая по умолчанию опция
ImageIndex: Integer Содержит индекс связанного с опцией изображения из компонента TImageList (страница Win32). В этом случае свойство Bitmap игнорируется. Если значение равно -1, то с списком нет никакой связи.

Контекстное меню (пиктограмма на странице Standard).

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

Контекстное меню можно временно отключать от компонента переводом свойства AutoPopup: boolean в значение True.

Опции обоих видов меню можно временно дезактивировать посредством свойства Enabled или сделать невидимыми (вместе с нижележащей ветвью для главного меню) свойством Visible.

Для создания и изменения меню в процессе разработки приложения в среде Delphi предназначен Конструктор меню (Menu Designer). Запуск Конструктора меню можно выполнить по команде Menu Designer… контекстного меню компонента MainMenu, а также с помощью двойного щелчка кнопкой мыши на этот компонент. При конструировании меню имеет тот же вид, что и при выполнении приложения.

Наименование пункта меню задается путем присвоения нужного значения его свойству Caption. Кроме того, в Delphi у компонента MainMenu доступны такие свойства как Checked и Bitmap, определяющие соответственно:

· Checked = true/false – наличие/отсутствие отметки Ö у пункта меню (для отметки выбора);

· Bitmap = рисунок, определяющий наличие картинки перед названием пункта в меню.

Для закрепления процедуры за выбором некоторого пункта меню (событие OnClick), на этапе проектирования приложения следует выбрать этот пункт с помощью клавиатуры или мыши.

ВНИМАНИЕ!!! Проявите смекалку и ВНИМАТЕЛЬНО прочитайте задание!!!

Пример выполнения задания

Задание. Используя компонент MainMenu создать приложение, которое при выборе определенного пункта меню обеспечивает:

- вывод на экран сообщения «Привет!»;

- ввод пользователем некоторого числа (аргумента);

- вычисление cos, sin, tg, ctg, введенного аргумента;

- вывод формул для вычисления arccos(x), arcsin(x), actg(x),arcctg(x);

- выход из программы.

Реализация.

Создали новую форму и расположили на ней компоненты: MainMenu, Bevel, Label, Edit, Image, согласно рисунку 1.

Компоненты Bevel, Label и Edit располагаем на форме в следующей последовательности: сначала Bevel, затем Label и Edit – так как Bevel должен оказаться «снизу» Label’a и Edit’a.

Четыре компонента Image располагаем на форме произвольным образом. Свойству Picture компонента Image1 (Image1.Picture) присваиваем значение arccos.bmp. Соответственно в Image2.Picture загружаем arcsin.bmp, в Image3.Picture - arctg.bmp, в Image4.Picture - arcctg.bmp. Данные рисунки необходимо создать в следующей последовательности:

- создаем формулу в MS Word

- копируем ее в MS Paint

- подгоняем размеры холста под формулу

- сохраняем рисунок в каталоге с проектом под соответствующим именем.

 

Создание главного меню происходит в следующей последовательности:

1. помещаем на форму компонент MainMenu, двойным щелчком на компоненте вызываем Дизайнер Меню;

2. проектируем меню согласно рисунку (вставка разделителя осуществляется вводом символа ‘-’ в поле Caption):

 


3. кроме свойств Caption элементов Главного Меню, меняем свойство Name подпунктов меню «Функция» следующим образом:

 

Пункт подменю «Функция» (сверху вниз) Свойство Caption Свойство Name
Первый Cos(x) cosx1
Второй Sin(x) sinx1
Третий Tg(x) tgx1
Четвертый Ctg(x) ctgx1
Пятый – разделитель - Не меняем
Шестой Arccos(x)’ arccosx1
Седьмой Arcsin(x)’ arcsinx1
Восьмой Arctg(x)’ arctgx1
Девятый Arcctg(x)’ arcctg1

4. закрываем Дизайнер Меню и теперь за каждым пунктом меню закрепляем процедуру программы. Для этого просто щелкаем мышью на нужном пункте главного меню (оно уже появилось в форме).

В программу необходимо добавить следующие процедуры (закрепить за …):

· за пунктом меню (п. Меню) «Привет!»:

//выдача сообщения при выборе п.Меню "привет"

procedure TForm1.N4Click(Sender: TObject);

Begin

ShowMessage('Привет мир, Windows и пользователь!)'+#13#10+'Это мы из СГТК!');

end;

#13#10 – символ конца строки. С его помощью осуществляется переход на другую строку в окне выдачи сообщения.

· за п. Меню «Аргумент»:

//выбор пункта меню "Аргумент"

procedure TForm1.N7Click(Sender: TObject);

Begin

label1.Caption:='Введите значение x:';

edit1.Visible:=true;

form1.activecontrol:=Edit1;

end;

· за п. Меню «Выход»:

//выбор п.Меню "Выход" - выход из приложения

procedure TForm1.N2Click(Sender: TObject);

Begin

close;

end;

· за пунктами Меню cos(x), sin(x), tg(x), ctg(x) ([1]):

//обработка выборов п.п.Меню "Функция" до разделителя:

//cos(x), sin(x), tg(x), ctg(x) осуществляется ОДНОЙ процедурой

procedure TForm1.cosx1Click(Sender: TObject);

Var

cod:Integer;

ws,resstr:String;

Begin

ws:=Edit1.text;

val(ws,x,cod);

try //начало блока try...except..end



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: