Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч1.doc
Скачиваний:
7
Добавлен:
02.11.2018
Размер:
2.38 Mб
Скачать

Компонент Memo

Компонент Memo можно использовать для работы с многострочным текстом. В нашем проекте в поле этого компонента будут регистрироваться результаты вычислений.

Компонент можно найти на закладке Standard палитры компонент.

Расположите компонент Memo на форме или внутри группы «Протокол выполненных расчетов», и присвойте ему имя memProtocol.

Присвойте свойству Scroll Bars значение ssVertical. В результате в поле должна появиться полоса вертикальной прокрутки.

Свойству Read Only присвойте значение True.

Завершение работы над интерфейсом

В завершение, расположите на форме две кнопки с надписями «Выполнить расчет» и «Очистить протокол». Присвойте этим кнопкам имена btnCalculate, btnClearProtocol.

На этом этап разработки интерфейса можно закончить. Предполагаемый вид конструктора формы, полученный в результате разработки примера представлен на рисунке 2.2.

Рисунок 2.16 – Разработанный интерфейс приложения

      1. Создание процедур обработки событий Процедура очистки протокола

Рисунок 2.17 - Процедура очистки протокола

Для очистки поля Memo можно использовать событие onClick для кнопки «Очистить протокол». Процедура обработки этого события представлена на рисунке 2.3.

В единственной инструкции этой процедуры вызывается процедура Clear (очистить) объекта memProtocol .

Процедура инициализации формы

Эту процедуру следует связать с событием onCreate компонента frmFormula. Процедура должна очищать протокол, а в поля ввода заносить числа, что позволяет сразу после запуска приложения нажимать кнопку «Выполнить расчет». Такая инициализация приложения позволяет существенно ускорить отладку приложения, так как освобождает программиста от необходимости вводить исходные данные при тестировании программы.

Для очистки протокола в этой процедуре можно было бы продублировать оператор из предыдущей процедуры, но можно заставить эту процедуры выполняться, проимитировав из программы нажатие на кнопку «Очистить протокол». Как это сделать, показано на рисунке 2.4.

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

Процедура инициализации для рассматриваемого примера представлена на рисунке 2.4.

Рисунок 2.18 - Процедура инициализации формы

Процедура выполнения расчета по формуле

Эта процедура должна быть связана с событием кнопки «Выполнить расчет».

После создания шаблона процедуры можно приступить к ее написанию.

Процедура для рассматриваемого примера приведена ниже, на рисунке 2.5.

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

По условию, все переменные должна быть вещественного типа, поэтому тип результат будет тоже вещественным.

Для упрощения написания выражения, расчет по формуле следует выполнять поэтапно. В рассматриваемом примере вначале вычислим значения числителя и знаменателя формулы, а затем найдем окончательный результат путем деления числителя на знаменатель. Числитель будет представлять переменная с именем ch, а знаменатель – переменная zn. Кроме того, перед вычислением знаменателя найдем значение подкоренного выражения, которое назовем q. Очевидно, что все эти переменные тоже будут вещественного типа.

Помимо чисел, нам понадобится переменная, которая будет содержать строку с результатами расчета для протокола. Назовем ее str, а тип у нее должен быть String.

Таким образом, раздел описаний переменных для нашей процедуры может выглядеть так.

var

a, x, n, ch, q, zn, y : Real;

str : string;

Написание операторной части процедуры можно начать с формирования строки исходных данных, которая понадобится для протокола и, возможно, для вывода сообщения об ошибке в исходных данных. Эту строку можно создать, объединяя строки с названиями переменных и тексты, написанные в полях ввода данных.

str := 'a=' + edtA.text + '; x=' + edtX.text + '; n=' + edtN.text + ';' ;

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

try

a:=strToFloat(edtA.text);

x:=strToFloat(edtX.text);

n:=strToInt(edtN.text);

except

str := 'Не могу прочесть исходные данные’+ chr(13)+ str;

showMessage(str);

exit;

end;

В этом фрагменте производится попытка преобразования текстов в числа заданного типа путем выполнения инструкций, записанных после служебного слова try. Если такая попытка оказывается неудачной, то выполняются инструкции, записанные после служебного слова except. В этом случае изменяется значение строки str, в которой записаны значения исходных данных. Эта строка объединяется со строкой 'Не могу прочесть исходные данные’, а между ними вставляется символ перевода строки chr(13).

Инструкция showMessage(str) во время выполнения создаст на экране окно с сообщением, записанным в строке str.

Последняя инструкция (exit;) приводит к завершению работы процедуры.

Рисунок 2.19 – Процедура расчета по формуле

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

Расчет по формуле обеспечивается путем последовательного выполнения нескольких инструкций. Вычисляется значение числителя, подкоренного выражения и знаменателя. Затем результат определяется путем деления числителя на знаменатель. После вычисления формируется строка результата, путем объединения строки исходных данных с полученным результатом.

Если вы решили не разбираться с функцией format(), то для вывода результата можно написать инструкцию, которая приводится ниже.

str := str + ’ y=’ + floatToStr(y);

В том случае, если расчет выполнить не удалось, выводится сообщение о том, что расчет выполнить не удалось, а для протокола строка с исходными данными объединяется со строкой «Расчет невозможен».

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

memProtocol.Lines.Append(str);

Полностью процедура вычисления по формуле приведена на рисунке 2.5.

Перед тем, как проверять работу приложения следует подготовить контрольный пример.