Создание процедур обработки событий для калькулятора
До сих пор при создании приложения программист не написал ни одной строки текста программы. Все за него сделала интегрированная среда Delphi. Если теперь запустить на выполнение созданную программу, то она успешно откомпилируется, но не будет выполнять ни каких действий, связанных с нажатием кнопок калькулятора, кроме кнопки Close, которая по определению закрывает окно программы.
Для того чтобы программа работала, объявим три переменных Op1, Op2, Res. Для этого в разделе var интерфейсной части главного модуля после текста Form1: TForm1; вставим следующий текст:
Op1, Op2: integer;
Res: real;
Это и есть объявление трех переменных на языке Object Pascal. В нем указаны имена переменных и их тип.
Переменные Op1 и Op2 объявлены целого типа и будут хранить числовые значения первого и второго операндов. Переменная Res объявлена вещественного типа и будет хранить результат вычисления.
Добавим действия, обеспечивающие поддержку сложения. Для этого необходимо выполнить следующие действия:
q Дважды щелкнуть кнопку ButtonAdd в окне дизайнера форм.
В ответ на это Delphi автоматически создаст внутри окна редактирования заданный по умолчанию (пустой) обработчик событий для этой кнопки, который выглядит следующим образом:
procedure TForm1.ButtonAddClick(Sender: TObject);
Begin
end;
При этом курсор будет помещен в строку между ключевыми словами begin end.
Теперь необходимо заполнить обработчик событий текстом программы.
q Вставим между ключевыми словами begin end текст обработчика события:
Op1:=StrToInt(EditOp1.Text);
Op2:=StrToInt(EditOp2.Text);
Res:=Op1+Op2;
EditResult.Text:=FloatToStr(Res);
LabelResult.Visible:=True;
LabelResult.Caption:='Результат +';
Здесь в первой строке выполняется преобразование введенного пользователем значения первого операнда из строкового типа (значения свойства Text компонента EditOp1) в целый тип и присваивание преобразованного значения переменной с именем Op1. Преобразование выполняется вызовом стандартной функции StrToInt.
Во второй строке выполняется преобразование типа значения второго операнда и присваивание его переменной Op2.
В третьей строке вычисляется сумма первого и второго операндов и результат присваивается переменной Res.
В четвертой строке значение переменной Res преобразуется из вещественного типа строку символов и присваивается свойству Text компонента EditResult. Преобразование выполняется вызовом стандартной функции FloatToStr. Значение переменной Res появится на форме (в окне программы).
В пятой строке свойству Visible компонента LabelResultприсваивается значение True, в результате чего компонент становится видимым.
В шестой строке свойству Caption компонента LabelResult присваивается значение Результат + , которое и появится на форме слева от выведенного ранее результата сложения двух введенных пользователем операндов.
Добавим действия, обеспечивающие поддержку вычитания. Для этого необходимо выполнить следующие действия:
q Дважды щелкнуть кнопку ButtonSub в окне дизайнера форм.
В ответ на это Delphi cнова создаст внутри окна редактирования заданный по умолчанию (пустой) обработчик событий для этой кнопки, который выглядит следующим образом:
procedure TForm1.ButtonSubClick(Sender: TObject);
Begin
end;
q Введем текст процедуры обработчика события для кнопки «―».
procedure TForm1.ButtonSubClick(Sender: TObject);
Begin
Op1:=StrToInt(EditOp1.Text);
Op2:=StrToInt(EditOp2.Text);
Res:=Op1-Op2;
EditResult.Text:=FloatToStr(Res);
LabelResult.Visible:=True;
LabelResult.Caption:='Результат -';
end;
Обработчик события для кнопки «―» очень похож на обработчик события для кнопки « + ». Отличия состоят в том, что для получения результата используется операция вычитания и свойству Caption компонента LabelResult присваивавается значение Результат -.
Аналогично, процедуры обработки событий для кнопок умножения и деления будут выглядеть следующим образом:
procedure TForm1.ButtonMultClick(Sender: TObject);
Begin
Op1:=StrToInt(EditOp1.Text);
Op2:=StrToInt(EditOp2.Text);
Res:=Op1*Op2;
EditResult.Text:=FloatToStr(Res);
LabelResult.Visible:=True;
LabelResult.Caption:='Результат *';
end;
procedure TForm1.ButtonDelClick(Sender: TObject);
Begin
Op1:=StrToInt(EditOp1.Text);
Op2:=StrToInt(EditOp2.Text);
Res:=Op1/Op2;
EditResult.Text:=FloatToStr(Res);
LabelResult.Visible:=True;
LabelResult.Caption:='Результат /';
end;
q Дважды щелкнуть кнопку ButtonClear в окне дизайнера форм.
q Введем текст во вновь сгенерированный обработчик события:
procedure TForm1.ButtonClearClick(Sender: TObject);
Begin
EditOp1.Clear;
EditOp2.Clear;
EditResult.Clear;
LabelResult.Visible:=False;
EditOp1.SetFocus;
end;
В этом обработчике очищаются окна редактирования операндов и результата, а также делается невидимой метку (надпись), расположенная левее окна редактирования результата и фокус ввода передается компоненте EditOp1.
Создадим обработчик события, позволяющий изменять в процессе выполнения программы значения операндов предыдущей операции, и при этом автоматически очищать поле результата. Для этого необходимо выполнить следующую последовательность действий:
q Щелкнуть на компоненте EditOp1.
q Выбрать страницу Events инспектора объектов.
Появится список событий, которые могут быть сгенерированы окном редактирования (компонентом типа TEdit). Первое из них называется OnChange и генерируется каждый раз каждый раз при изменении содержимого окна редактирования.
q Дважды щёлкните правую колонку события OnChange для автоматической генерации обработчика этого события. Сгенерированный обработчик события будет назван EditOp1Change
q Измените его имя на EditOpChange.
q Введите следующий текст в обработчик события:
procedure TForm1. (Sender: TObject);
Begin
EditResult.Clear;
LabelResult.Visible:=False;
end;
Этот обработчик очищает окно редактирования результата и делает невидимой метку (надпись), расположенная левее окна редактирования результата.
q Щелкнуть на компоненте EditOp2.
q Выбрать страницу Events инспектора объектов.
q В правой колонке события OnChange в раскрывающемся списке обработчиков событий выбрать обработчик EditOpChange
В результате событию OnChange компонента EditOp2 назначен тот же обработчик события, что и событию OnChange компонента EditOp1.