unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, Buttons;
type
{ TForm1 }
TForm1 =
class(TForm)
Label1: TLabel;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Tsb0: TSpeedButton;
Tsb01: TSpeedButton;
Tsb02: TSpeedButton;
Tsb03: TSpeedButton;
Tsb04: TSpeedButton;
Tsb05: TSpeedButton;
Tsb06: TSpeedButton;
Tsb07: TSpeedButton;
Tsb08: TSpeedButton;
Tsb09: TSpeedButton;
TsbClear: TSpeedButton;
TsbDivision: TSpeedButton;
TsbMultiplication: TSpeedButton;
TsbSubtraction: TSpeedButton;
TsbAddition: TSpeedButton;
TsbEqual: TSpeedButton;
procedure TsbClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TsbOpClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
// Result ist eigentlich "reserviert" als Rückgabewert von Funktionen,
// das kann ggfls. zu Verwirrung führen.
// Result lieber in Ergebnis umbenennen.
number,result: real;
math_op : boolean;
zeichen, op, current_op : char;
zeichenkette : ansistring;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.TsbClick(Sender: TObject);
begin
if Sender
is TSpeedButton
then begin
// Wir nutzen für die Ziffer das Tag-Attribut der Buttons.
// Button für die 1 erhält Tag := 1;
// ...
// Button für die 9 erhält Tag := 9;
// Button für die 0 erhält Tag := 0;
// Tag kann man im Objektinspektor entsprechend zuweisen.
zeichen := Chr(TSpeedButton(Sender).Tag);
end;
if math_op
then begin
math_op:= false;
zeichenkette := zeichen;
end
else zeichenkette := zeichenkette + zeichen;
label1.Caption := zeichenkette;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
math_op := true;
current_op := '
0';
end;
procedure TForm1.TsbOpClick(Sender: TObject);
begin
if Sender
is TSpeedButton
then begin
// Auch hier könnte man mit Tag arbeiten:
case TSpeedButton(Sender).Tag
of
1 : op := '
1';
// if Sender = TsbAddition then op := '1';
2 : op := '
2';
// if Sender = TsbSubtraction then op := '2';
3 : op := '
3';
// if Sender = TsbMultiplication then op := '3';
4 : op := '
4';
// if Sender = TsbDivision then op := '4';
5 : op := '
c';
// if Sender = TsbClear then op := 'c';
6 : op := '
=';
// if Sender = TsbEqual then op := '=';
end;
end;
math_op := true;
number := strtofloat(label1.Caption);
case current_op
of
'
0' : result := number;
'
1' : result := result+number;
'
2' : result := result-number;
'
3' : result := result*number;
'
4' : result := result/number;
'
c' : result := 0;
'
=' : result := result;
end;
current_op := op;
label1.Caption := floattostr(result);
end;
end.