Если вы только-только начали изучать Delphi, попробуйте сначала сделать в Delphi калькулятор, стандартный калькулятор или с тремя edit для ввода первого числа, вторую для ввода второго числа, а третью для вывода ответа. У вас обязательно получится эта программа, и вы поверите в свои силы программиста.
А позже своё приложениеможете сравнить с этим калькулятором.
unit s_calc_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit; // индикатор
// кнопки с цифрами
Button0: TButton;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
ButtonPlus: TButton; // "+"
ButtonMinus: TButton; // "-"
ButtonEnter: TButton; // "="
ButtonC: TButton; // "с" - очистка, сброс
ButtonZ: TButton; // "," - десятичный разделитель
procedure FormCreate(Sender: TObject);
procedure DigitBtnClick(Sender: TObject); // кнопки "0" - "9"
procedure OpBtnClick(Sender: TObject); // кнопки "+", "-" и "="
procedure ButtonCClick(Sender: TObject);
procedure Edit1Change(Sender: TObject; var Key:Char);
procedure ButtonZClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ 1. Во время создания формы свойству Tag каждой
цифровой надо кнопки присвоить значение
равное цифре, которая должна появится на
индикаторе калькулятора.
2. После того как обычным образом будет создана
процедура обработки события OnClick для одной
из цифровых кнопок, например для кнопки "1",
надо задать, что событие OnClick для остальных
кнопок обрабатывает эта же процедура. Делается
это выбором процедуры в списке, который
появляется в результате щелчка на значке
раскрывающегося списка в соответствующей
строке вкладки Events.
}
var
accum: real; // аккумулятор
oper: integer; // операция: 1 - '+' ; 2 - '-';
// 0 - "выполнить" (кнопка "=")
f: integer;
{ f = 0 ждем первую цифру нового числа, например,
после выполнения операции, когда на
индикаторе результат.
f = 1 ждем остальные цифры. }
// Щелчок на кнопках "0" - "9"
procedure TForm1.DigitBtnClick(Sender: TObject);
var
Btn: TButton;
ch: Char;
begin
Btn := Sender as TButton;
ch := Chr(48+Btn.Tag);
// chr(48) = '0'; chr(49) = '1' и т.д.
// можно и так: ch := Btn.Caption;
case Btn.Tag of
1..9: // кнопки "1" - "9"
if f = 0 // первая цифра числа
then begin
Edit1.Text := ch;
f := 1; // ждем остальные цифры
end
else Edit1.Text := Edit1.Text + ch;
0: // кнопка "0"
if Edit1.Text <> '0' // на индикаторе 0
// чтобы на индикаторе не было
// нескольких нулей в начале числа
then Edit1.Text := Edit1.Text + '0';
end;
end;
// десятичная точка
procedure TForm1.ButtonZClick(Sender: TObject);
begin
if Edit1.Text = '0' then
begin
Edit1.Text := '0,';
f := 1;
end;
if Pos(',',Edit1.Text) = 0 then
Edit1.Text := Edit1.Text + ',';
end;
// выполнение операции
procedure DoOper;
var
numb: real; // число на индикаторе
begin
// accum содержит результат предыдущей
// операции, oper - код операции, которую
// надо выполнить. Операнд находится
// на индикаторе.
numb := StrToFloat(Form1.Edit1.Text);
case oper of
0: accum := numb;
1: accum := accum + numb;
2: accum := accum - numb;
end;
Form1.Edit1.Text := FloatToStr(accum);
end;
// Обрабатывает щелчок на кнопках "+", "-" и "="
procedure TForm1.OpBtnClick(Sender: TObject);
{ Надо выполнить предыдущую операцию,
вывести результат на индикатор,
запомнить текущую операцию и
установить режим ожидания первой
цифры нового числа. }
var
Btn: TButton;
begin
Btn := Sender as TButton;
if f = 0 // ждем первую цифру, но пользователь
// щелкнул на кнопке операции
then
// свойство Tag кнопки хранит код операции
oper := Btn.Tag // запомним операцию
else begin
DoOper; // выполнить предыдущую операцию
oper := Btn.Tag; // запомнить текущую операцию
f:=0; // ждем первую цифру нового числа
end;
end;
// кнопка "с" - очистка
procedure TForm1.ButtonCClick(Sender: TObject);
begin
Edit1.Text := '0';
accum := 0;
oper := 0;
f := 0; // ждем первую цифру числа
end;
// нажатие клавиши в поле Edit1
procedure TForm1.Edit1Change(Sender: TObject; var Key:Char);
begin
Key := Chr(0); // не отображать символы
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
oper := 0;
end;
end.