Отлично , задача есть . Давай на обозрение свои наработки...
unit calc_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
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;
Button0: TButton;
ButtonZ: TButton;
procedure Edit1Change(Sender: TObject; var Key:Char);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button0Click(Sender: TObject);
procedure ButtonZClick(Sender: TObject);
procedure ButtonCClick(Sender: TObject);
procedure ButtonPlusClick(Sender: TObject);
procedure ButtonMinusClick(Sender: TObject);
procedure ButtonEnterClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
accum: real; // аккумулятор
oper: integer; // операция: 1 - '+' ; 2 - '-';
// 0 - "выполнить" (кнопка "=")
f: integer;
{ f = 0 ждем первую цифру нового числа, например,
после выполнения операции, когда на
индикаторе результат.
f = 1 ждем остальные цифры. }
// кнопка 0
procedure TForm1.Button0Click(Sender: TObject);
begin
if f = 0 // первая цифра числа
then begin
Edit1.Text := '0';
f := 1; // ждем остальные цифры
end
else
if Edit1.Text <> '0'
// чтобы на индикаторе не было
// нескольких нулей в начале числа
then Edit1.Text := Edit1.Text + '0';
end;
// кнопка 1
procedure TForm1.Button1Click(Sender: TObject);
begin
if f = 0 // первая цифра числа
then begin
Edit1.Text := '1';
f := 1; // ждем остальные цифры
end
else Edit1.Text := Edit1.Text + '1';
end;
// кнопка 2
procedure TForm1.Button2Click(Sender: TObject);
begin
if (f = 0) // первая цифра числа
then begin
Edit1.Text := '2';
f := 1; // ждем остальные цифры
end
else Edit1.Text := Edit1.Text + '2';
end;
// кнопка 3
procedure TForm1.Button3Click(Sender: TObject);
begin
if f = 0
then begin
Edit1.Text := '3';
f := 1;
end
else Edit1.Text := Edit1.Text + '3';
end;
// кнопка 4
procedure TForm1.Button4Click(Sender: TObject);
begin
if f = 0 then
begin
Edit1.Text := '4';
f := 1;
end
else Edit1.Text := Edit1.Text + '4';
end;
// кнопка 5
procedure TForm1.Button5Click(Sender: TObject);
begin
if (f = 0)
then begin
Edit1.Text := '5';
f := 1;
end
else Edit1.Text := Edit1.Text + '5';
end;
// кнопка 6
procedure TForm1.Button6Click(Sender: TObject);
begin
if f = 0
then begin
Edit1.Text := '6';
f := 1;
end
else Edit1.Text := Edit1.Text + '6';
end;
// кнопка 7
procedure TForm1.Button7Click(Sender: TObject);
begin
if f = 0
then begin
// первая цифра числа
Edit1.Text := '7';
f := 1;
end
else Edit1.Text := Edit1.Text + '7';
end;
// кнопка 8
procedure TForm1.Button8Click(Sender: TObject);
begin
if f = 0
then begin
Edit1.Text := '8';
f := 1;
end
else Edit1.Text := Edit1.Text + '8';
end;
// кнопка 9
procedure TForm1.Button9Click(Sender: TObject);
begin
if f = 0 // первая цифра числа
then begin
Edit1.Text := '9';
f := 1; // ждем остальные цифры
end
else Edit1.Text := Edit1.Text + '9';
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.ButtonPlusClick(Sender: TObject);
{ Надо выполнить предыдущую операцию,
вывести результат на индикатор,
запомнить текущую операцию и
установить режим ожидания первой
цифры нового числа. }
begin
if f = 0 // ждем первую цифру, но пользователь
// щелкнул на кнопке операции
then oper := 1 // запомним операцию
else begin
DoOper; // выполнить предыдущую операцию
oper :=1; // запомнить текущую операцию
f:=0; // ждем первую цифру нового числа
end;
end;
// кнопка "-"
procedure TForm1.ButtonMinusClick(Sender: TObject);
// см. комментарий к проц. обработки OnClick на "+"
begin
if f = 0 // ждем первую цифру
then oper := 2
else begin
DoOper; // выполнить предыдущую операцию
oper :=2; // запомнить текущую операцию
f:=0; // ждем первую цифру нового числа
end;
end;
// кнопка "="
procedure TForm1.ButtonEnterClick(Sender: TObject);
begin
if f = 0 // ждем первую цифру
then oper := 0
else begin
DoOper; // выполнить предыдущую операцию
oper :=0; // запомнить текущую операцию
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.
Вот впринципе просто калькулятор, а мне надо чтобы он работал как с простыми цифрами так и с римкими