Создание интерфейса приложения




Создадим новое приложение и поместим на его главную форму и поместим на нее компоненты.

 

 

Интерфейс приложения "Калькулятор"

 

Текстовый блок типа TEdit с именем ValueEdit предназначен для ввода операндов. Компоненты типа TSpeedButton с именами SpeedButton1 – SpeedButton4 предназначены для ввода соответствующих арифметических операций, компоненты с именами SpeedButton5 – SpeedButton15 – это цифровые клавиши и десятичная точка, они предназначены для занесения числа в текстовый блок ValueEdit. Компонент - SpeedButton16 будет очищать окно ValueEdit. Результат в это окно будем выводит, нажимая на кнопку (SpeedButton18). Наш калькулятор будет вычислять три функции: - квадратный корень (SpeedButton17), - возведение в квадрат (SpeedButton19), - обратная функция (SpeedButton20). Для создания эффекта объемности на форму помещены два компонента TBevel, один со значением свойства Style равным bsRaised ("приподнятый"), другой со значением этого свойства bsLowered ("утопленный").

Создание кода приложения

Начнем разработку приложения с того, что обеспечим ввод цифр и десятичной точки в текстовый блок при нажатии кнопок SpeedButton5 – SpeedButton15. Для этого создадим обработчик события OnClick для кнопки :

 

procedure TForm1.SpeedButton5Click(Sender: TObject);

Begin

ValueEdit.text:= ValueEdit.text+(Sender as TSpeedButton).Caption;

ValueEdit.SelStart:= length(ValueEdit.Text);

end;

Назначим созданный нами обработчик всем остальным кнопкам с цифрами 2 – 0 и кнопке с десятичной точкой. Для этого на закладке Events Инспектора объектов для каждой из этих кнопок раскроем список около строки события OnClick и выберем процедуру SpeedButton5Click.

Здесь мы добавили к свойству Text текстового блока ValueEdit один символ – а именно свойство Caption компонента TSpeedButton. Какой из компонентов типа TSpeedButton будет использовать данный обработчик события – это зависит от параметра процедуры Sender. Тип этого параметра – TObject. Объекты этого класса не имеют свойства Caption. Нам необходимо привести тип параметра Sender к дочернему классу TSpeedButton, что мы и делаем с помощью оператора-квалификатора as.

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

Теперь обеспечим очистку окна ввода чисел при нажатии кнопки . Для этого в обработчик события OnClick этой кнопки поместим строку кода:

procedure TForm1.SpeedButton16Click(Sender: TObject);

Begin

ValueEdit.Text:= '';

end;

 

Создадим обработчик события OnClick для кнопок . При нажатии любой из них должна быть подготовлена для выполнения соответствующая операция. Для этого необходимо 1) запомнить первый операнд; 2) запомнить вид операции; 3) очистить окно ValueEdit и ждать пока пользователь введет второе число и нажмет кнопку со знаком равенства.

Предварительно следует описать три переменные в разделе private описания формы:

 

TForm1 = class (TForm)

{объявления компонентов и обработчиков событий}

Private

{ Private declarations }

Value1,Value2:real;

Oper:-1..10;

Public

{ Public declarations }

end;

Переменные Value1 и Value2 – это первый и второй операнды, а переменная Oper будет хранить код выбранной операции. При нажатии кнопки соответствующей арифметической операции, этот код будем получать из свойства Tag кнопки. Свойство Tag как раз и предназначено для хранения вместе с компонентом произвольной вспомогательной информации, доступной как на стадии проектирования, так и при выполнении приложения. Присвоим значение свойства Tag кнопкам: для "+" это будет 0; для "-" – 1; для "*" для – 2; и для "/" – 3.

Код обработчика события OnClick:

procedure TForm1.SpeedButton1Click(Sender: TObject);

Begin

Value1:= StrToFloat(ValueEdit.text);

Oper:= (Sender As TSpeedButton).Tag;

SpeedButton16Click(Sender);

end;

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

Далее мы должны решить еще одну проблему: как использовать кнопку со знаком " - " в двух целях, а именно, как знак операции и как унарный минус перед отрицательным числом. Здесь можно заключить соглашение: если курсор находится в самом начале текстового блока, то использовать унарный минус, иначе считать, что пользователь хочет выполнить операцию вычитания. Новый вариант предыдущей процедуры может выглядеть так:

procedure TForm1.SpeedButton1Click(Sender: TObject);

Begin

if ((Sender As TSpeedButton).Tag = 1) and (ValueEdit.SelStart = 0) then

Begin

ValueEdit.Text:= '-'+ValueEdit.text;

ValueEdit.SelStart:= 1;

Exit;

end;

Value1:= StrToFloat(ValueEdit.text);

Oper:= (Sender As TSpeedButton).Tag;

SpeedButton16Click(Sender);

end;

Далее необходимо создать код обработчика события OnClick для кнопки . Перед нажатием этой кнопки пользователь вводит второй операнд. При нажатии кнопки нам необходимо: 1) преобразовать второй операнд из текста в число; 2) выполнить арифметическую операцию, соответствующую запомненному в переменной Oper коду; 3) вывести результат в окно компонента ValueEdit, преобразовав его предварительно из числа с плавающей точкой в текст:

procedure TForm1.SpeedButton18Click(Sender: TObject);

Begin

Value2:= StrToFloat(ValueEdit.Text);

case Oper of

0: Value1:= Value1 + Value2;

1: Value1:= Value1 - Value2;

2: Value1:= Value1 * Value2;

3: Value1:= Value1 / Value2;

end;

ValueEdit.Text:= FloatToStr(Value1);

end;

Оставшиеся три операции нашего калькулятора являются одноместными. Будем их выполнять непосредственно, когда нажата соответствующая кнопка. Для кнопки код обработчика события OnClick может выглядеть так:

procedure TForm1.SpeedButton17Click(Sender: TObject);

Begin

Value1:= StrToFloat(ValueEdit.text);

Value1:= sqrt(Value1);

ValueEdit.Text:= FloatToStr(Value1);

end;

Задание. Напишите аналогичные обработчики событий OnClick для кнопок и .

Последнее, что необходимо сделать перед первым запуском приложения – инициализировать переменные. Это можно выполнить в обработчике события OnCreate формы:

procedure TForm1.FormCreate(Sender: TObject);

Begin

Value1:= 0;

Value2:= 0;

ValueEdit.Text:= FloatToStr(Value1);

Oper:= -1;

end;

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: