Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
2
Лабораторная работа по Delphi «Работа с меню (главное меню)»
Лабораторная работа
«Работа с меню (главное меню MainMenu)»
Цель: приобретение навыков работы с компонентом MainMenu.
Меню один из распространенных элементов пользовательского интерфейса. Меню представляет собой список пунктов, объединенных по функциональному признаку, каждый из которых обозначает команду или вложенное меню (подменю).
Главное меню располагается в верхней части формы под ее заголовком и содержит наиболее общие команды приложения. В Delphi главное меню представлено компонентом MainMenu.
Для создания и изменения меню в процессе разработки приложения в среде Delphi предназначен Конструктор меню (Menu Designer). Запуск Конструктора меню можно выполнить по команде Menu Designer… контекстного меню компонента MainMenu, а также с помощью двойного щелчка кнопкой мыши на этот компонент. При конструировании меню имеет тот же вид, что и при выполнении приложения.
Наименование пункта меню задается путем присвоения нужного значения его свойству Caption. Кроме того, в Delphi 5 у компонента MainMenu доступны такие свойства как Checked и Bitmap, определяющие соответственно:
Для закрепления процедуры за выбором некоторого пункта меню (событие OnClick), на этапе проектирования приложения следует выбрать этот пункт с помощью клавиатуры или мыши.
Задание. Используя компонент MainMenu создать приложение, которое при выборе определенного пункта меню обеспечивает:
Реализация.
Создали новую форму и расположили на ней компоненты: MainMenu, Bevel, Label, Edit, Image, согласно рисунку 1.
Рис 1. Расположение
компонент на форме
Компоненты Bevel, Label и Edit располагаем на форме в следующей последовательности: сначала Bevel, затем Label и Edit так как Bevel должен оказаться «снизу» Labela и Edita.
Четыре компонента Image располагаем на форме произвольным образом. Свойству Picture компонента Image1 (Image1.Picture) присваиваем значение arccos.bmp (загружаем рисунок из каталога e:\5381\Урок\Menu\). Соответственно в Image2.Picture загружаем arcsin.bmp, в Image3.Picture - arctg.bmp, в Image4.Picture - arcctg.bmp.
Создание главного меню происходит в следующей последовательности:
проектируем меню согласно рисунку 2 (вставка разделителя осуществляется вводом символа - в поле Caption):
Рисунок 2. Проектирование главного меню программы
Пункт подменю «Функция» (сверху вниз) |
Свойство 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 |
В программу необходимо добавить следующие процедуры (закрепить за …):
//выдача сообщения при выборе п.Меню "привет"
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) осуществляется ОДНОЙ процедурой
procedure TForm1.cosx1Click(Sender: TObject);
var
cod:Integer;
ws,resstr:String;
begin
ws:=Edit1.text;
val(ws,x,cod);
try //начало блока try...except..end
with Sender As TMenuItem do //будем обрабатывать Sender как пункт Меню
begin //объект Sender вызвал эту процедуру
if (Sender = cosx1) then //если sender - это cosx1 (т.е.cos(x)), тогда:
begin
str(cos(x):1:4,ws);//сразу преобразуем значение функции в строку
Resstr:='Cos(x) = ';//и определим начало результирующей строки
end;
if (Sender = sinx1) then
begin
str(sin(x):1:4,ws);
Resstr:='Sin(x) = ';
end;
if (Sender = tgx1)then
begin
str(tan(x):1:4,ws);
Resstr:='tg(x) = ';
end;
if (Sender = ctgx1)then
begin
str(cotan(x):1:4,ws);
Resstr:='Ctg(x) = ';
end;
end;
except //если в блоке try...except возникла ошибка, она обрабатывается ЗДЕСЬ
ShowMessage('А существует ли значение выбранной функции для Вашего аргумента?');
exit; //а мы просто о ней сообщим
end;
ShowMessage(Resstr + ws);
end;
//выполняется при вводе символов в Edit
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','-']) then
key:=#0;
end;
//выбор п.Меню arccos(x)'
procedure TForm1.arccosx1Click(Sender: TObject);
begin //прямое преобразование Sender в элемент меню TMenuItem
TMenuItem(Sender).checked:= not (TMenuItem(Sender).checked);
if (TMenuItem(Sender).checked) then
image1.visible:=true
else
image1.visible:=false;
end;
//выбор п.Меню arcsin(x)'
procedure TForm1.arcsinx1Click(Sender: TObject);
begin
TMenuItem(Sender).checked:= not (TMenuItem(Sender).checked);
if (TMenuItem(Sender).checked) then
image2.visible:=true
else
image2.visible:=false;
end;
//выбор п.Меню arctg(x)'
procedure TForm1.arctgx1Click(Sender: TObject);
begin
TMenuItem(Sender).checked:= not (TMenuItem(Sender).checked);
if (TMenuItem(Sender).checked) then
image3.visible:=true
else
image3.visible:=false;
end;
//выбор п.Меню arcctg(x)'
procedure TForm1.arcctgx1Click(Sender: TObject);
begin
TMenuItem(Sender).checked:= not (TMenuItem(Sender).checked);
if (TMenuItem(Sender).checked) then
image4.visible:=true
else
image4.visible:=false;
end;
На рисунке 3 изображен вид работающей программы.
Рисунок 3. Вид программы «Меню» в работе
1 Блок try… except… end предназначен для «обхода» различных ошибочных ситуаций в программе. Его вставляют в то место программы, где может возникнуть ошибка (например: деление на нуль, нехватка памяти…), а именно помещают ВСЕ операторы, которые могут вызвать ошибку, между try и except. А между except и end помещают обработчик ошибки. То есть, если в операторах где-то между try и except возникнет ошибка, программа не «зависнет», а перейдет в блок except… end, где программист помещает операторы или процедуры обработки ошибки. В примере просто сообщается о возможной ошибке, которая может возникнуть в данном случае при вычислении ctg(0).
Оператор with <объект> do позволяет работать со свойствами объекта не употребляя каждый раз при этом его имени.
Оператор <объект> As <Тип> позволяет работать с <объектом> именно как с представителем определенного <типа> объектов. В примере Объект Sender благодаря As воспринимается далее как элемент меню (MenuItem). Это позволяет сравнить его со всеми теми элементами Главного Меню, которые могли вызвать процедуру form1.cosx1Click и выявить «того, кто это сделал».