Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабник по СПО

.pdf
Скачиваний:
11
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

Функция выводит сообщение в модальном окне с кнопкой OK, которая организует ожидание. В заголовке окна сообщения выводится имя исполняемого приложения, а на поле окна сообщения - текст сообщения, записанный внутри скобок.

Простое сообщение не определяет реакцию пользователя. Для определения реакции пользователя предусмотрена функция:

Function MessageBox(Const Text, Caption: PChar; Flags: Longint): Integer;

Функция выводит сообщение в модальном окне с набором кнопок, число и вид которых определяются значениями флагов. Функция возвращает значение нажатой кнопки в соответствии с табл.5.1.

Таблица 5.1

Значения, возвращаемые кнопками сообщений

 

 

Имя константы

 

Численное значение

 

 

 

 

 

 

 

 

 

IDOK

 

1

 

 

 

 

 

 

 

 

 

IDCANCEL

 

2

 

 

 

 

 

 

 

 

 

IDABORT

 

3

 

 

 

 

 

 

 

 

 

IDRETRY

 

4

 

 

 

 

 

 

 

 

 

IDIGNORE

 

5

 

 

 

 

 

 

 

 

 

IDYES

 

6

 

 

 

 

 

 

 

 

 

IDNO

 

7

 

 

 

 

 

 

 

Константы,

определяющие

вид и число кнопок, могут принимать значения:

MB_YESNOCANCEL, MB_OKCANCEL, MB_RETRYCANCEL, MB_OK, MB_YESNO.

Константы, определяющие вид значка, записываются после задания вида кнопок

через операцию

ИЛИ и могут

принимать значения: MB_ICONINFORMATION,

MB_ICONEXCLAMATION, MB_ICONSTOP, MB_ICONQUESTION.

Сообщение, показанное на рис.5.3, можно вызвать на экран как члена класса Application с заданием соответствующих значений параметров спецификации функции

(язык C++ Builder):

int MSq=Application->MessageBox("Программу закрыть", "Работа с меню",MB_YESNOCANCEL | MB_ICONQUESTION);

121

PDF created with pdfFactory Pro trial version www.pdffactory.com

Рис.5.3. Вид сообщения с тремя кнопками

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

int MSq = MessageBox(NULL,"Программу закрыть?",

"Работа с меню", MB_YESNOCANCEL | MB_ICONQUESTION);

Значение, возвращённое функцией, присвоено переменной MSq и может быть использовано для выполнения действий, соответствующих нажатой кнопке.

На языке Delphi переменную MSq необходимо объявить как глобальную, и тогда вызов функции выглядит следующим образом:

Var MSq :Integer;

.....

MSq:=Application.MessageBox('Программу закрыть',

'Работа с меню',MB_YESNOCANCEL Or MB_ICONQUESTION);

Вызов сообщения через функцию рабочего стола на языке Delphi имеет следующий вид: MSq:=MessageBox(0,'Программу закрыть','Работа с меню',

MB_YESNOCANCEL Or MB_ICONQUESTION);

При использовании функций MessageBox следует учитывать, что в них применяются строки типа PChar, а не типа String или AnsiString. Пример текста процедуры с использованием функции приведён в распечатке 5.1.

Распечатка 5.1

Procedure TfmCalc.FormCloseQuery (Sender: TObject; Var CanClose: Boolean);

Var

StrMs: PChar;

Begin

If IndSave=0 Then StrMs:='Результаты не сохранены' Else StrMs:='Закрытие программы';

If Application.MessageBox('Выходите из программы?',StrMs,

122

PDF created with pdfFactory Pro trial version www.pdffactory.com

MB_YESNO + MB_ICONQUESTION+MB_DEFBUTTON2) = IDYES Then CanClose:=True

Else CanClose:=False

End;

или

void __fastcall TfmCalc::FormCloseQuery (TObject *Sender, bool &CanClose)

{

PChar StrMs;

if (IndSave==0) StrMs="Результаты не сохранены"; else StrMs="Закрытие программы";

int MsQv=Application->MessageBox("Выходите из программы?" ,StrMs,MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2); if (MsQv==IDYES) CanClose=true;

else CanClose=false;

}

Схема программы для расчёта площадей плоских фигур

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

Затем необходимо вывести список фигур, площадь которых может рассчитать программа. После этого должна выполняться проверка наличия команд на расчёт, на запись результатов расчёта в список и на сохранение результатов расчёта в файле (рис.5.4).

123

PDF created with pdfFactory Pro trial version www.pdffactory.com

 

 

 

 

 

 

 

 

 

 

 

1

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

 

 

 

 

 

Вывод

 

 

 

 

 

 

 

списка фигур

 

 

 

нач. значений

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

Да

4

?

Нет

 

 

 

 

 

 

 

 

 

Вывод

 

 

 

 

 

Выход

 

 

 

 

 

 

 

 

 

 

 

площади S

11

Конец

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

5

 

?

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рез. сохр.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Расчёты

 

 

Запись в файл

 

 

 

Да

 

 

7

 

?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Записать

8

Нет

Вывод списка

 

Рис.5.4. Схема программы для расчёта площади

плоских фигур

После выбора вида рассчитываемой фигуры необходимо вывести соответствующие названия исходных данных и редакторы для их ввода.

Для расчёта площади круга необходим его радиус, для квадрата - размер одной стороны. Для расчёта площади прямоугольника нужно ввести размеры двух сторон. Для

расчёта площади треугольника необходимо знать длину стороны и высоту или длину трёх сторон. При каждом изменении исходных данных должен производиться расчёт площади фигуры и вывод рассчитанного значения площади на экран.

Процедура ввода данных может выполняться по схеме, рассмотренной в работе № 3, и приведённой там же на рис.3.5.

Подпрограмма выбора вида фигуры и расчёта площади показана как предопределённый процесс, схема процесса приведена на рис.5.5.

124

PDF created with pdfFactory Pro trial version www.pdffactory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

фигуры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

" "

 

"

"

 

 

 

"

"

" 3"

 

 

" А, Н"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подготовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подготовка

 

 

 

 

 

ввода R

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ввода А и Н

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подготовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ввода А

 

 

 

 

 

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод R

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод А

 

 

 

 

 

 

 

 

 

16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод Н

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подготовка

 

 

 

 

 

 

 

 

 

 

 

Подготовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ввода А и В

 

 

 

 

 

 

ввода А, В и С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Расчёт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

площади S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.5.5. Схема процедуры выбора фигуры и расчёта площади

Создание проекта

Создаём проект типа VCL Forms Application. Сохраняем проект в подготовленной заранее папке с именем Work5, присваиваем главному модулю имя UnSFig, а проекту - имя Area. Присваиваем форме имя fmArea. Проверяем работу проекта и размещаем на

форме визуальные объекты для ввода и вывода параметров и для подачи управляющих команд (рис.5.6).

Рис.5.6. Окно программы для расчёта площади плоских фигур

125

PDF created with pdfFactory Pro trial version www.pdffactory.com

Размещаем на форме пять меток: три для обозначения исходных данных, одну для обозначения результата расчёта и одну для вывода сообщения об ошибке.

Размещаем на форме четыре редактора для ввода значений исходных данных и вывода результата. Свойству ReadOnly редактора для вывода результата присваиваем значение True. Устанавливаем четыре кнопки, вводим заголовки и пиктограммы. Устанавливаем редактор для ввода имени файла, в котором будут сохраняться результаты расчётов.

Помещаем на форму список типа TListBox. В свойство списка Items вводим перечень фигур и сочетаний горячих клавиш в соответствии с рис.5.6. Поскольку расчёт площади треугольника может производиться двумя способами: по высоте и по длине трёх сторон, то для выбора способа расчёта площади треугольника введена третья клавиша, нажимаемая отдельно, после нажатия сочетания клавиш Ctrl+T.

Начальные значения площади выделенной фигуры должны соответствовать начальным значениям исходных данных. Обычно в качестве начальных значений выбирают нули, но в данном случае, при выборе начальной фигурой треугольника с расчётом площади по трём сторонам, удобнее выбрать значения сторон 3, 4 и 5, соответственно площадь должна получить значение 6.

Проверяем работу проекта.

Для формирования сообщения о закрытии программы добавим ещё одну форму. Присвоим добавленной форме имя fmClose, файлу второго модуля - имя UnClose. Установим на форму рисунок со знаком вопроса, метку с вопросом и две кнопки для выбора ответа (рис.5.7).

Рис.5.7. Окно сообщения о закрытии программы

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

126

PDF created with pdfFactory Pro trial version www.pdffactory.com

второго модуля - имя UnErr. При возникновении исключительной ситуации должно открываться модальное окно с соответствующей ситуации надписью (рис.5.8).

Рис.5.8. Окно сообщения о недопустимых значениях

исходных данных

Надпись на сообщении об ошибке должна соответствовать ситуации - ошибка ввода или недопустимые значения длины сторон треугольника.

Это уже третья форма. Создаём ещё одну, четвёртую, форму для записи результатов расчёта. Помещаем на неё многострочный редактор типа TMemo. Не забываем внести ссылки на все созданные формы в файл главной формы, и во все созданные формы вносим ссылки на главную форму.

Текст программы на языке Delphi

Написание текста необходимо производить в такой последовательности, чтобы после написания каждого оператора можно было проверять работу программы. Объявляем переменные типа Double для хранения задаваемых и расчётной величин. Объявляем переменную RP для хранения вида рассчитываемой фигуры и переменную Trng для регистрации вызова фигуры треугольника, строковую переменную для формирования строки результата и три переменные типа Byte для хранения информации о числе записей результатов в отчёте, о записи последнего расчёта и о сохранении отчёта в файле.

Var

fmArea: TfmArea;

127

PDF created with pdfFactory Pro trial version www.pdffactory.com

A,C,H,S :Double;

RP,Trng :Byte;

IndWr, IndPas, IndSave :Byte; ResStr: String;

Создаём функцию преобразования строки в число с выводом сообщения о некорректном вводе или недопустимых значениях исходных данных. Сообщение выводим на модальную форму fmError.

Function TfmArea.Vvod(Str: String): Double;

Begin

Try

Vvod:=StrToFloat(Str);

Except

Vvod:=0;

If ((Str <> '')And(Str <> ' '))

Then Begin fmError.LabelErr.Caption:='Ошибка ввода'; fmError.ShowModal

End

End

End;

Затем через событие OnCreate главной формы задаём начальные значения

параметров по умолчанию и исходное значение индекса в списке для расчёта площади треугольника по трём сторонам. Задаём текст строки для записи в отчёт на случай, если команда на запись появится раньше команды на расчёт.

Procedure TfmArea.FormCreate(Sender: TObject);

Begin

RP:=3; ListBox1.ItemIndex:=RP; A:=3; H:=4; C:=5;

IndWr:=0; IndSave:=0; IndPas:=0;

ResStr:=' A = 3; B = 4; C = 5; S = 6.'

End;

Создаём текстовые константы для строк, которые будут использоваться более одного раза, чтобы не переписывать одно и то же несколько раз.

Const lA='Сторона А = ';

128

PDF created with pdfFactory Pro trial version www.pdffactory.com

lB='Сторона B = '; lH='Высота H = ';

SS='Площадь треугольника S = '; sA=' A = ';

Создаём процедуру расчёта, используя переключатель Case с параметром RP (распечатка 5.2).

Распечатка 5.2

Procedure TfmArea.Calc;

Begin

IndPas:=0;

Case RP Of

2:Begin

ALb.Caption:=lA;

LabH.Caption:=lH;

SLb.Left:=224;

SLb.Caption:=SS;

LabC.Visible:=False;

CEd.Visible:=False;

LabH.Visible:=True;

HEd.Visible:=True;

S:=A*H/2;

SEd.Text:=' '+FloatToStrF(S,ffGeneral,5,2);

ResStr:=sA+AEd.Text+

';H = '+HEd.Text+'; S = '+SEd.Text+'.'

End;

3:Begin

ALb.Caption:=lA;

LabH.Caption:=lB; LabC.Caption:='Сторона C = '; SLb.Left:=224; SLb.Caption:=SS; LabH.Visible:=True; HEd.Visible:=True; LabC.Visible:=True; CEd.Visible:=True;

S:=(A+H+C)*(H+C-A)*(A-H+C)*(A+H-C)/16;

129

PDF created with pdfFactory Pro trial version www.pdffactory.com

If S>=0 Then Begin

S:=Sqrt(S);

Ed.Text:=' '+FloatToStrF(S,ffGeneral,5,2)

End

Else Begin

SEd.Text:=' ??'; fmError.LabelErr.Caption:='Недопустимые'#13'значения';

fmError.ShowModal

End;

ResStr:=sA+AEd.Text+'; B = '+HEd.Text+ ';C = '+CEd.Text+'; S = '+SEd.Text+'.'

End;

4:Begin

ALb.Caption:=lA;

SLb.Left:=246; SLb.Caption:='Площадь квадрата S = '; S:=A*A;

SEd.Text:=' '+FloatToStrF(S,ffGeneral,5,2); LabH.Visible:=False;

HEd.Visible:=False;

LabC.Visible:=False;

CEd.Visible:=False;

ResStr:=sA+AEd.Text+'; S = '+SEd.Text+'.'

End;

5:Begin

ALb.Caption:=lA;

LabH.Caption:=lB;

SLb.Left:=210;

SLb.Caption:='Площадь прямоугольника S = '; LabH.Visible:=True;

LabC.Visible:=False;

CEd.Visible:=False;

HEd.Visible:=True;

S:=A*H;

SEd.Text:=' '+FloatToStrF(S,ffGeneral,5,2)

130

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]