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

Вид материалаДокументы
2.7 Создание меню.
Подобный материал:
1   2   3

2.7 Создание меню.

В Delphi для создания главного меню, содержащего перечень допустимых операций приложения, имеется невизуальный компонент Main Menu. Главное меню является экземпляром класса TMainMenu. Основным свойством этого класса является свойство

property Items : TMenuItem; default;

Содержит элементы нулевого уровня главного меню приложения.

Чаще всего главное меню создаётся на этапе конструирования формы. Для этого необходимо сначала поместить компонент Main Menu на форму, а затем вызвать конструктор меню. Для вызова конструктора меню можно дважды щелкнуть левой кнопкой мыши по компоненту Main Menu.

Кроме главного меню, связанного с формой приложения, в Delphi имеется компонент Popup Menu, предназначенный для создания контекстного меню. Контекстное меню может быть создано для любого оконного элемента управления. Для вызова контекстного меню необходимо поместить курсор мыши на оконный элемент и нажать правую кнопку мыши. Для установления связи между оконным элементом и компонентом Popup Menu используется свойство Popup Menu, в котором следует указать имя соответствующего компонента-меню. Контекстное меню, как и главное, создаётся при помощи конструктора меню (Menu Designer).

Элементы как главного, так и контекстного меню являются объектами класса TMenuItem, который является непосредственным потомком класса TComponent. Элемент меню может представлять собой подменю, команду или разделительную линию.

Если элемент представляет собой подменю, имеющееся у него свойство Items должно содержать соответствующие пункты этого подменю. Если элемент является разделительной линией, то его свойство Caption должно содержать значение «-» (знак «минус»). Во всех остальных случаях элемент меню будет командой, т.е. с этим элементом меню будет связан обработчик события OnClick.

Рассмотрим основные свойства класса TmenuItem.

property Caption : string;

Содержит текст элемента меню. Если перед некоторым символом текста поместить символ &, то таким образом можно задать клавишу быстрого перехода (акселератор).

property Checked : Boolean;

Если свойство имеет значение true, то элемент меню помечается «галочкой».

property Enabled : Boolean;

Если свойство имеет значение true, то элемент меню реагирует на события от мыши и клавиатуры. В противном случае элемент не доступен и выделяется тусклым цветом. По умолчанию имеет значение true.

property Items[index : integer] : TMenuItem; default;

Свойство задаёт младшие элементы меню по отношению к текущему элементу. Число элементов определяется свойством Count. Нумерация начинается с нуля. Свойство доступно только для чтения.

property ShortCut : TShortCut;

Определяет комбинацию «горячих» клавиш, обеспечивающих быстрый выбор данного элемента меню.

В классе TMenuItem определено событие

property OnClick : TNotifyEvent:

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

Контекстное меню является экземпляром класса TPopupMenu, которое так же, как и класс TMainMenu, является потомком класса Tmenu. Рассмотрим основные характеристики, которые вводятся в классе TPopupMenu.

property Alignment : TPopupAlignment;

Определяет расположение контекстного меню относительно курсора мыши:

paLeft – левый верхний угол меню находится у курсора;

paRight – правый верхний угол меню находится у курсора;

paCenter – середина верхней границы меню находится у курсора.

По умолчанию имеет значение paLeft.

property AutoPopup : Boolean;

Если свойство имеет значение true, контекстное меню появляется при нажатии правой клавиши мыши, если имеет значение false, меню не появляется (в этом случае следует использовать метод Popup). По умолчанию имеет значение true.

Метод Popup определяется следующим образом:

procedure Popup(x, y : integer); virtual;

Выводит на экран меню, при этом координаты его левого верхнего угла равны x и y.

В классе TPopupMenu определено событие OnPopup:

property OnPopup : TNotifyEvent;

Возникает при вызове контекстного меню при нажатии правой клавиши мыши, если свойство AutoPopup имеет значение true, либо при вызове метода Popup.

Рассмотрим пример создания главного меню.

Пример 7. Дана квадратная целочисленная матрица размера 44. Создать приложение с главным меню, позволяющим выбрать одну из трёх команд:

Максимум (нахождение максимума элементов матрицы)

Минимум (нахождение минимума элементов матрицы)

Сумма (нахождение суммы элементов матрицы)

Для ввода и отображения на форме элементов матрицы использовать компонент StringGrid.





Для решения задачи поместим на форму компонент StringGrid1 и установим ему значения свойств, указанные в примере 6. Поместим на форму компонент Label1, свойство Caption которого равно Ответ, и компонент Label2, в котором будем размещать вычисленное значение. Со страницы Standard поместим на форму компонент MainMenu. Выберем свойство Items компонента MainMenu1 и щёлкнем по кнопке с тремя точками. Появится окно конструктора меню. Введём названия пунктов меню (свойство Caption). Для определения реакции на выбор пунктов меню следует по очереди выбирать все пункты меню и щёлкать по ним мышкой. По умолчанию свойству Name пунктов меню присвоены соответственно имена N1, N2, N3.

Полный текст программы:

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Label1: TLabel;

Label2: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

private { Private declarations }

public { Public declarations }

end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.N1Click(Sender: TObject);

var i,j,s:integer;

begin

s:=0;

for i:=0 to stringgrid1.colcount-1 do

for j:=0 to stringgrid1.rowcount-1 do

s:=s + strtoint(stringgrid1.cells[i,j]);

label2.caption:=inttostr(s)

end;

procedure TForm1.N2Click(Sender: TObject);

var i,j,max:integer;

begin

max:=strtoint(stringgrid1.cells[0,0]);

for i:=0 to stringgrid1.colcount-1 do

for j:=0 to stringgrid1.rowcount-1 do

if strtoint(stringgrid1.cells[i,j])>max

then max:=strtoint(stringgrid1.cells[i,j]);

label2.Caption:=inttostr(max)

end;

procedure TForm1.N3Click(Sender: TObject);

var i,j,min:integer;

begin

min:=strtoint(stringgrid1.cells[0,0]);

for i:=0 to stringgrid1.colcount-1 do

for j:=0 to stringgrid1.rowcount-1 do

if strtoint(stringgrid1.cells[i,j])
then min:=strtoint(stringgrid1.cells[i,j]);

label2.Caption:=inttostr(min)

end;

end.


Задачи

24. Дана квадратная целочисленная матрица размера 44. Создать приложение с главным меню для выбора одной из трёх команд, позволяющих найти количество:

отрицательных элементов матрицы

положительных элементов матрицы

нулевых элементов матрицы

Для ввода и отображения на форме элементов матрицы использовать компонент StringGrid.

Окно работающего приложения:





25. Дана квадратная целочисленная матрица размера 44. Создать приложение с главным меню для выбора одной из трёх команд, позволяющих найти номер строки

с минимальной суммой элементов строки

с минимальным максимальным элементом строки

с минимальным первым элементом строки

Для ввода и отображения на форме элементов матрицы использовать компонент StringGrid.

Окно работающего приложения:




26*. Даны две квадратные целочисленные матрицы a и b размера 44. Создать приложение с главным меню для выбора одной из трёх команд, позволяющих найти

a + b

a – b

a  b

Для ввода и отображения на форме элементов матриц a и b, а также матрицы, получающейся в результате, использовать компоненты StringGrid1, StringGrid2 и StringGrid3.

Окно работающего приложения: