Рис 1. Расположение компонент на форме
Компоненты Bevel, Label и Edit располагаем на форме в следующей последовательности: сначала Bevel, затем Label и Edit – так как Bevel должен оказаться «снизу» Label’a и Edit’a.
Четыре компонента Image располагаем на форме произвольным образом. Свойству Picture компонента Image1 (Image1.Picture) присваиваем значение arccos.bmp (загружаем рисунок из каталога e:\5381\Урок\Menu\). Соответственнов Image2.Picture загружаем arcsin.bmp, в Image3.Picture - arctg.bmp, в Image4.Picture - arcctg.bmp.
Создание главного меню происходит в следующей последовательности:
1. Помещаем на форму компонент MainMenu, двойным щелчком на компоненте вызываем Дизайнер Меню;
2. Проектируем меню согласно рисунку 2 (вставка разделителя осуществляется вводом символа ‘-’ в поле Caption):
3.
Рис 2. Проектирование главного меню программы
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):
//обработка выборов п.п.Меню "Функция" до разделителя:
//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;
· за событием OnKeyPress элемента Edit1:
//выполняется при вводе символов в Edit
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','-']) then
key:=#0;
end;
· за пунктом меню arccos(x)':
//выбор п.Меню 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)':
//выбор п.Меню 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)':
//выбор п.Меню 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)':
//выбор п.Меню 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. Работающее программное приложение.
Индивидуальные задания.
Ниже приведено 15 вариантов задач. По указанию преподавателя выберите свое индивидуальное задание. Уточните условие задания, количество, наименование, типы исходных данных. В соответствии с этим установите количество визуальных компонент в форме.
Во всех заданиях скалярные переменные вводить с помощью компонента TEdit с соответствующим пояснением в виде компонента TLabel. Скалярный результат выводить в виде компонента TLabel. Массивы представлять на форме в виде компонентов TStringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов. Вычисления выполнять после нажатия соответствующих кнопок визуального компонента MainMenu.
1. Задана матрица размером NxM. Получить массив В, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, и значение 1 в противном случае.
2. Задана матрица размером NxM. Получить массив В, присвоив его k-му элементу значение 1, если элементы k-й строки матрицы упорядочены по убыванию, и значение 0 в противном случае.
3. Задана матрица размером NxM. Получить массив В, присвоив его k-му значение 1, если k-я строка матрицы симметрична, и значение 0 в противном случае.
4. Задана матрица размером NxM. Определить k - количество "особых" элементов матрицы, считая элемент "особым", если он больше суммы остальных элементов своего столбца.
5. Задана матрица размером NxM. Определить k - количество "особых" в матрицы, считая элемент "особым", если в его строке слева от него находятся элементы, меньшие его, а справа - большие.
6. Задана символьная матрица размером NxM. Определить k - количество различных элементов матрицы (т.е. повторяющиеся элементы считать один раз).
7. Дана матрица размером NxM. Упорядочить ее строки по неубыванию их первых элементов.
8. Дана матрица размером NxM. Упорядочить ее строки по неубыванию суммы их элементов.
9. Дана матрица размером NxM. Упорядочить ее строки по неубыванию их наибольших элементов.
10. Определить, является ли заданная квадратная матрица n-го порядка симметричной относительно побочной диагонали.
11. Для матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце, или наоборот.
12. В матрице n-го порядка переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине.
13. В матрице n-го порядка найти максимальный среди элементов, лежащих ниже побочной диагонали, и минимальный среди элементов, лежащих выше главной диагонали.
14. В матрице размером NхМ поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением.
15. Из матрицы n-го порядка получить матрицу порядка n-1 путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.
Лабораторная работа 4.
ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИЙ OLE И СОМ В ВИЗУАЛЬНОМ ПРОГРАММИРОВАНИИ.
Цель работы:познакомиться на конкретных примерах с технологиями OLE и СОМ.
Основные понятия.
На протяжении многих лет программисты стремятся придумать способы, позволяющие использовать уже написанные коды. Например, если в программе нужна работа с таблицами, то зачем придумывать велосипед, если есть MicrosoftExcel. Технология, позволяющая вызвать из вашей программы Excel или даже встроить это приложение в свою систему, называется OLE. Студентам предлагается познакомиться на лабораторном занятии с этой технологией.
Еще одним шагом в эволюции программирования стала технология СОМ. По сути, именно она лежит в основе технологии OLE, и именно с помощью нее реализуется сложное взаимодействие между приложениями, написанными разными программистами и на разных языках. На этом занятии предлагается рассмотреть использование СОМ-серверов Delphi для работы с Word и Excel.
Программа 1 (OLE технологии).
Шаг 1. Создайте новую форму.
Шаг 2. Расположите на ней компоненты: OLEContainer (закладка System) и кнопку (Button).
Шаг 3. Создайте файл Excel. Занесите в него свои ФИО. Сохраниете его ‘H:\l.xls’.
Шаг 4. Создайте процедуру обработки сообщения о нажатии на кнопку:
procedure TForml.ButtonlClick(Sender: TObject); begin
OLEContainerl.CreateLinkToFile('H:\1.xls',FALSE); end;
Шаг 5. Скомпилируйте приложение. Нажмите на кнопку. Убедитесь, что в OLEContainer будет загружен созданный вами файл 1 .xls.
Шаг 6. Щелкните 2 раза на OLEConatainer, и вы увидите, что будет запущен MicrosoftExcel с загруженным в него вашим фалом. Внесите в файл изменения. Сохраните файл и закройте Excel. Нажмите в своем приложении кнопку и убедитесь, что в OLEContainer отобразились изменения файла (рис. 1).
Шаг 7. Измените процедуру обработки сообщения о нажатии на кнопку следующим образом:
procedure TForml.ButtonlClick(Sender: TObject);