Калькулятор — классическое упражнение для знакомства с визуальным программированием в Delphi: он задействует и компоненты VCL, и обработку событий, и базовую логику разбора введённых данных. Разберём, как собрать простой калькулятор на четыре действия.
Шаг 1. Интерфейс
На форму добавляется поле ввода (TEdit) для отображения текущего значения и набор кнопок (TButton) — цифры от 0 до 9, кнопки операций (+, −, ×, ÷), кнопка «=» и кнопка очистки. Для аккуратного расположения кнопок удобно использовать TGridPanel или просто выставить координаты вручную в Object Inspector.
Шаг 2. Хранение состояния
Калькулятору нужно где-то хранить промежуточный результат и выбранную операцию между нажатиями кнопок. Для этого заводятся переменные уровня формы:
var
FValue: Double;
FOperation: Char;
FNewInput: Boolean;
FValue хранит накопленное значение, FOperation — текущую операцию, а FNewInput — флаг, что следующий ввод цифры должен начать новое число, а не дописываться к старому.
Шаг 3. Обработка цифр
Для всех кнопок с цифрами можно назначить один общий обработчик OnClick и определять нажатую цифру по надписи на кнопке (Caption отправителя события Sender):
procedure TForm1.DigitClick(Sender: TObject);
begin
if FNewInput then
begin
EditResult.Text := '';
FNewInput := False;
end;
EditResult.Text := EditResult.Text + (Sender as TButton).Caption;
end;
Шаг 4. Обработка операций и знака «=»
При нажатии на операцию текущее значение поля ввода сохраняется в FValue, операция запоминается в FOperation, а флаг FNewInput выставляется в True, чтобы следующий ввод начинал новое число. При нажатии «=» выполняется вычисление на основе FOperation и обоих чисел, а результат выводится обратно в поле ввода.
Что можно добавить дальше
- Обработку деления на ноль с выводом сообщения об ошибке;
- Поддержку дробных чисел и кнопку с точкой/запятой;
- Клавиатурный ввод через обработку OnKeyPress формы;
- Историю вычислений в отдельном списке.
Несмотря на простоту, именно на таких учебных проектах удобнее всего разобраться, как VCL-компоненты, события и обычный процедурный код работают вместе в одном приложении.