Blame lazarus/calc-line/unit1.pas

Ivan Mahonin 015e6c
unit Unit1;
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
{$mode objfpc}{$H+}
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
interface
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
uses
Ivan Mahonin 015e6c
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
type
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
  { TForm1 }
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
  TForm1 = class(TForm)
Ivan Mahonin 015e6c
    Edit1: TEdit;
Ivan Mahonin 015e6c
    Label1: TLabel;
Ivan Mahonin 015e6c
    procedure Edit1Change(Sender: TObject);
Ivan Mahonin 015e6c
  private
Ivan Mahonin 015e6c
    { private declarations }
Ivan Mahonin 015e6c
  public
Ivan Mahonin 015e6c
    { public declarations }
Ivan Mahonin 015e6c
  end;
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
var
Ivan Mahonin 015e6c
  Form1: TForm1;
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
implementation
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
{$R *.lfm}
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
{ TForm1 }
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
procedure TForm1.Edit1Change(Sender: TObject);
Ivan Mahonin 015e6c
var
Ivan Mahonin 015e6c
  i: integer;
Ivan Mahonin 015e6c
  a, b: single;
Ivan Mahonin 015e6c
  c, sign: char;
Ivan Mahonin 015e6c
  digits: string;
Ivan Mahonin 015e6c
  line: string;
Ivan Mahonin 015e6c
  result: string;
Ivan Mahonin 015e6c
begin
Ivan Mahonin 015e6c
  digits := '';
Ivan Mahonin 015e6c
  sign := ' ';
Ivan Mahonin 015e6c
  a := 0;
Ivan Mahonin 015e6c
  b := 0;
Ivan Mahonin 015e6c
  line := Edit1.Text;
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
  try
Ivan Mahonin 015e6c
    for i := 1 to length(line) do begin
Ivan Mahonin 015e6c
      c := line[i];
Ivan Mahonin 015e6c
      if (c='+') or (c='-') or (c='*') or (c='/') then begin
Ivan Mahonin 015e6c
        a := StrToFloat(digits);
Ivan Mahonin 015e6c
        digits := '';
Ivan Mahonin 015e6c
        sign := c;
Ivan Mahonin 015e6c
      end else
Ivan Mahonin 015e6c
      if c = '=' then begin
Ivan Mahonin 015e6c
        b := StrToFloat(digits);
Ivan Mahonin 015e6c
        digits := '';
Ivan Mahonin 015e6c
        result := '';
Ivan Mahonin 015e6c
        if sign='+' then result := FloatToStr(a + b);
Ivan Mahonin 015e6c
        if sign='-' then result := FloatToStr(a - b);
Ivan Mahonin 015e6c
        if sign='*' then result := FloatToStr(a * b);
Ivan Mahonin 015e6c
        if sign='/' then result := FloatToStr(a / b);
Ivan Mahonin 015e6c
        Edit1.Text := copy(line, 1, i) + result;
Ivan Mahonin 015e6c
      end else begin
Ivan Mahonin 015e6c
        digits := digits + c;
Ivan Mahonin 015e6c
      end;
Ivan Mahonin 015e6c
    end;
Ivan Mahonin 015e6c
  except end;
Ivan Mahonin 015e6c
end;
Ivan Mahonin 015e6c
Ivan Mahonin 015e6c
end.
Ivan Mahonin 015e6c