Вычислитель
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,Unit2;
type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit2: TEdit;
Edit3: TEdit;
Timer1: TTimer;
Label1: TLabel;
Button1: TButton;
procedure Button2Click(Sender: TObject);
procedure FormShortCut
(var Msg: TWMKey; var Handled: Boolean);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//Создаём Form2 Окно "Справка"
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Form2) then begin
Form2:=tform2.Create(self);
form2.Show;
end;
end;
//Делаем вычесление
procedure TForm1.Button2Click(Sender: TObject);
var
r1,r2,r3,r4:real;//extended;
s1,s2,s3,s4,s5:string;
g1,k1:integer;
begin
//Переменой S1 Присваивоем edit1.Text
s1:=edit1.Text;
s2:=edit2.Text;
s3:=edit3.Text;
//Считаем количество символов переменой s1
g1:= length(s1);
//Защита
if g1=0 then begin
//Появление надписи
label1.Visible:=true;
//Запускаем таймер
//Надпись появляется на 3 секунды
timer1.Enabled:=true;exit;end;
//exit-выход из процедуры
//Защита
if g1=1 then if (s1[1]='0')or(s1[1]='-')then
begin
//Появление надписи
label1.Visible:=true;
timer1.Enabled:=true;exit;end;
//Разрешаем в edit1.Text
//появление только цифр
for k1 := 1 to g1 do begin
//Исключает ввод лишнего минуса
if (k1>1)and(s1[k1]='-')then
begin
//Появление надписи
label1.Visible:=true;
timer1.Enabled:=true;exit;end;
//В первом окне вводим только цифры
if(s1[k1]<>'1')and(s1[k1]<>'2')
and(s1[k1]<>'3')and(s1[k1]<>'4')
and(s1[k1]<>'5')and(s1[k1]<>'6')
and(s1[k1]<>'7')and(s1[k1]<>'8')
and(s1[k1]<>'9')and(s1[k1]<>'0')
and(s1[k1]<>'-')and(s1[k1]<>',')
then begin
//Появление надписи
label1.Visible:=true;
timer1.Enabled:=true;exit;end;
end;
//Считаем количество символов переменой s2
g1:= length(s2);
if g1>1 then begin label1.Visible:=true;
timer1.Enabled:=true;exit;end;
// Во втором окне вводим только знаки + - * /
if(s2<>'+')and(s2<>'-')and(s2<>'*')
and(s2<>'/')
then begin
label1.Visible:=true;timer1.Enabled:=true;
exit;end;
//Считаем количество символов переменой s3
g1:= length(s3);
if g1=0 then begin
label1.Visible:=true;
timer1.Enabled:=true;exit;end;
if g1=1 then if (s3[1]='0')or(s3[1]='-')then
begin label1.Visible:=true;
timer1.Enabled:=true;exit;end;
//Разрешаем в edit1.Text
//появление только цифр
for k1 := 1 to g1 do begin
//Исключает в вод лишнего минуса
if (k1>1)and(s3[k1]='-')then
begin
label1.Visible:=true;timer1.Enabled:=true;
exit;end;
//В третьем окне вводим только цифры
if(s3[k1]<>'1')and(s3[k1]<>'2')
and(s3[k1]<>'3')and(s3[k1]<>'4')
and(s3[k1]<>'5')and(s3[k1]<>'6')
and(s3[k1]<>'7')and(s3[k1]<>'8')
and(s3[k1]<>'9')and(s3[k1]<>'0')
and(s3[k1]<>'-')and(s3[k1]<>',')
then begin
label1.Visible:=true;timer1.Enabled:=true;
exit;end;
end;
//Преобразуем цифровой текст в число
r1:=strtofloat(s1);
r3:=strtofloat(s3);
if s2[1]='+' then r4:=r1+r3; //Сложение
if s2[1]='-' then r4:=r1-r3; //Вычитание
if s2[1]='/' then r4:=r1/r3; //Деление
if s2[1]='*' then r4:=r1*r3; //Умножение
//Преобразуем число в текст
s4:=floattostr(r4);
//Собираем строку
s5:=s1+s2+s3+'='+s4;
//Добавляем строку снизу в memo1
memo1.Lines.Add(s5);
end;
//Стереть текст
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Clear;edit2.Clear;edit3.Clear;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Clear; //Стереть текст
end;
//Событие - Работа клавишами
procedure TForm1.FormShortCut
(var Msg: TWMKey; var Handled: Boolean);
begin
//нажать клавишу F1
if msg.CharCode=$70 then begin handled:=true;
edit1.SetFocus end; //Окно edit1 делаем активным
//нажать клавишу F2
if msg.CharCode=$71 then begin handled:=true;
edit2.SetFocus end;//Окно edit2 делаем активным
//нажать клавишу F3
if msg.CharCode=$72 then begin handled:=true;
edit3.SetFocus end; //Окно edit3 делаем активным
//нажать клавишу F4 -
//программно нажать кнопку РЕЗУЛЬТАТ
if msg.CharCode=$73 then begin handled:=true;
// Програмно включаем кнопку
Button2Click(self);
end;
//нажать клавишу F5 -
//программно нажать кнопку Стереть3
if msg.CharCode=$74 then begin handled:=true;
Button3Click(self);
end;
//нажать клавишу F8 -
//программно нажать кнопку Стереть
if msg.CharCode=$77 then begin handled:=true;
Button4Click(self);
end;
end;
//Запускается таймер
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Visible:= false;
timer1.Enabled:=false;//Выключаем таймер
end;
{Запускается таймер из любой процедуры.
Таймер включается через определёный
интервал, затем выполняется код в
процедуре таймера, выключается и через
определёный интервал снова включается.
Таймер будет работать пока мы его не выключим.}
end.
//Окно справка
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TForm2 = class(TForm)
Image1: TImage;
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
end.