calculadora en delphi 6

pabelar
04 de Julio del 2008
necesito saber los pasos para crear una calculadora en delphi 6

Lahsen
04 de Julio del 2008
Aqui tiene
Unit theCalc;
interface
Uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,Math;
Type
TCalculator = class(TForm)
ButtonPlus : TButton;
ButtonMul : TButton;
ButtonMR : TButton;
ButtonMinusPlus : TButton;
ButtonMinus : TButton;
ButtonEqual : TButton;
ButtonDiv : TButton;
Button4 : TButton;
Button1X : TButton;
ButtonPercent : TButton;
ButtonClear : TButton;
Button3 : TButton;
Button2 : TButton;
Button1 : TButton;
Button0 : TButton;
EditCalc : TEdit;
StaticText1 : TStaticText;
Button5 : TButton;
Button7 : TButton;
Button6 : TButton;
Button8 : TButton;
Button9 : TButton;
ButtonBack : TButton;
ButtonCe : TButton;
ButtonComma : TButton;
ButtonMC : TButton;
ButtonSQRT : TButton;
ButtonMS : TButton;
ButtonMPlus : TButton;
PowerXy : TButton;
Square : TButton;
Factorial : TButton;
procedure ButtonClearClick(Sender: TObject);
procedure ButtonCeClick(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure ButtonCommaClick(Sender: TObject);
procedure ButtonPlusClick(Sender: TObject);
procedure ButtonMCClick(Sender: TObject);
procedure ButtonMRClick(Sender: TObject);
procedure ButtonMSClick(Sender: TObject);
procedure ButtonDivClick(Sender: TObject);
procedure ButtonMulClick(Sender: TObject);
procedure ButtonMinusClick(Sender: TObject);
procedure ButtonBackClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1XClick(Sender: TObject);
procedure ButtonSQRTClick(Sender: TObject);
procedure ButtonEqualClick(Sender: TObject);
procedure ButtonPercentClick(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure ButtonMPlusClick(Sender: TObject);
procedure EditCalcKeyPress(Sender: TObject; var Key: Char);
procedure ButtonMinusPlusClick(Sender: TObject);
procedure SquareClick(Sender: TObject);
procedure PowerXyClick(Sender: TObject);
procedure FactorialClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private { Déclarations privées }
Len :Integer;
Clear :Boolean;
Func :(fNone,fPlus,fMinus,fMul,fDiv,fSQRT,f1x,fPercent,fSign);
StopGo :(Stop,Go);
Memory :Real;
First :Real;
Procedure OperateIt;
Procedure aDigitPressed(Digit:Char);
Procedure Indicator ;
public { Déclarations publiques }
End;
var Calculator: TCalculator;
implementation
{$R *.DFM}
procedure TCalculator.ButtonClearClick(Sender: TObject);
begin
EditCalc.Text:=\\'\\';
Func:=fnone;
First:=0;
Len:=15;
Clear:=True;
end;

procedure TCalculator.ButtonCeClick(Sender: TObject);
begin
EditCalc.Text:=\\'0\\';
len:=15;
end;
procedure TCalculator.Button7Click(Sender: TObject);
begin
aDigitPressed(TButton(Sender).Caption[1]);
end;

procedure TCalculator.ButtonCommaClick(Sender: TObject);
begin
If Clear Then
Begin
Len:=15;
Clear:=False;
EditCalc.Text:=\\'0\\';
end;
StrToInt(EditCalc.Text);
EditCalc.Text:=EditCalc.Text+\\'.\\';
Clear:=False;
StopGo:=Go;
End;
procedure TCalculator.ButtonMPlusClick(Sender: TObject);
begin
Clear:=True;
Memory:=Memory+StrToFloat(EditCalc.Text);
IndiCator;
end;
procedure TCalculator.ButtonMCClick(Sender: TObject);
begin
Clear:=True;
Memory:=0;
Indicator;
end;
procedure TCalculator.ButtonMRClick(Sender: TObject);
begin
Clear:=True;
EditCalc.Text:=FloatToStr(Memory);
end;

procedure TCalculator.ButtonMSClick(Sender: TObject);
begin
Clear:=True;
Memory:=StrToFloat(EditCalc.Text);
Indicator;
end;

procedure TCalculator.ButtonDivClick(Sender: TObject);
begin
If StopGo=Stop Then Func:=fDiv;
OperateIt;
Func:=fDiv;
End;
procedure TCalculator.ButtonMulClick(Sender: TObject);
begin
If StopGo=Stop Then Func:=fMul;
OperateIt;
Func:=fMul;
end;

procedure TCalculator.ButtonMinusClick(Sender: TObject);
begin
If StopGo=Stop Then Func:=fMinus;
OperateIt;
Func:=fMinus;
end;
procedure TCalculator.ButtonPlusClick(Sender: TObject);
begin
If StopGo=Stop Then Func:=fPlus;
OperateIt;
Func:=fPlus;
end;

procedure TCalculator.ButtonEqualClick(Sender: TObject);
begin
If StopGo=Go Then
Begin
OperateIt;
Clear:=True;
Func:=fNone;
End;
end;
Procedure TCalculator.OperateIt;
Var Value,Result:Real;
Begin
If StopGo<>Stop Then
Begin
Value:=StrToFloat(EditCalc.Text);
Case Func Of
fPlus:Result:=First+Value;
fMinus:Result:=First-Value;
fMul:Result:=First*Value;
fDiv:Result:=First/Value;
Else Result:=Value;
End;
First:=Result;
EditCalc.Text:=FloatToStr(Result);
Clear:=True;
StopGo:=Stop;
End;
End;
procedure TCalculator.ButtonBackClick(Sender: TObject);
Var Txt :String;
begin
Txt:=EditCalc.Text;
If Txt<>\\'0\\' Then Txt:=Copy(Txt,1,Length(Txt)-1);
If Txt=\\'\\' Then
Begin
Txt:=\\'0\\';
clear:=True;
end;
If Txt=\\'-\\' Then Txt:=\\'0\\';
EditCalc.Text:=Txt;
End;
procedure TCalculator.FormCreate(Sender: TObject);
Var TheKeyBoard :TKeyBoardState;
begin
Len:=15;
Memory:=0.00;
EditCalc.Text:=\\'\\';
GetKeyBoardState(TheKeyBoard);
TheKeyBoard[VK_NUMLOCK]:=1;//0;
SetKeyBoardState(TheKeyBoard);
end;
procedure TCalculator.FormDestroy(Sender: TObject);

Var TheKeyBoard :TKeyBoardState;
begin
Len:=15;
Memory:=0.00;
EditCalc.Text:=\\'\\';
GetKeyBoardState(TheKeyBoard);
TheKeyBoard[VK_NUMLOCK]:=0;
SetKeyBoardState(TheKeyBoard);
end;

procedure TCalculator.Button1XClick(Sender: TObject);
begin
EditCalc.Text:=FloatToStr(1/StrToFloat(EditCalc.Text));
end;

procedure TCalculator.ButtonSQRTClick(Sender: TObject);
begin
if (EditCalc.Text=\\'0\\') OR (EditCalc.Text=\\'\\')then exit
else if (Copy(EditCalc.Text,1,1)=\\'-\\') then
begin
messagebox(handle,\\'Negative numbers are not allowed!\\',\\'Negative Numbers\\',MB_Ok);
exit;
End;
EditCalc.Text:=FloatToStr(sqrt(StrToFloat(EditCalc.Text)));
Clear:=True;
End;
procedure TCalculator.ButtonPercentClick(Sender: TObject);
Var Result :Real;
begin
If Func in [fPlus..fDiv] Then
Begin
Result:=First/100*StrToFloat(EditCalc.Text);
EditCalc.Text:=FloatToStr(Result);
Clear:=True;
Func:=fNone;
end;
End;
Procedure TCalculator.aDigitPressed(Digit:Char);
Begin
If Clear Then
Begin
Len:=15;
Clear:=False;
EditCalc.Text:=Digit;
End
Else
EditCalc.Text:=EditCalc.Text+Digit;
StopGo:=Go;
End;
procedure TCalculator.FormKeyPress(Sender: TObject; var Key: Char);
begin
Case UpCase(Key) OF
\\'0\\'..\\'9\\' : aDigitPressed(Key);
\\'+\\' : ButtonPlus.Click;
\\'-\\' : ButtonMinus.Click;
\\'*\\' : ButtonMul.Click;
\\'/\\' : ButtonDiv.Click;
\\'.\\' : ButtonComma.Click;
\\'=\\' : ButtonEqual.Click;
\\'C\\' : ButtonCE.Click;
//Else Key:=#0;
end;
End;
procedure TCalculator.EditCalcKeyPress(Sender: TObject; var Key: Char);
begin
If Not (Key In[\\'0\\'..\\'9\\',\\'c\\',\\'C\\',#8])Then Key:=#0
end;
procedure TCalculator.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin
Case Key Of
VK_Return : ButtonEQual.Click ;
VK_BACK : ButtonBack.Click ;
VK_ESCAPE : ButtonClear.Click ;
VK_DIVIDE : ButtonDiv.Click ;
VK_DECIMAL : ButtonComma.Click ;
VK_SUBTRACT : ButtonMinus.Click ;
VK_ADD : ButtonPlus.Click ;
VK_MULTIPLY : ButtonMul.Click ;
end;
End;

Procedure TCalculator.Indicator;
Begin
If Memory <> 0 Then StaticText1.Caption:=\\'M\\'
Else
Begin
StaticText1.Caption:=\\' \\';
StaticText1.Enabled:=True;
StaticText1.BorderStyle:=sbsSunken;
End;
End;

procedure TCalculator.ButtonMinusPlusClick(Sender: TObject);
Var Txt :String;
begin
Txt:=EditCalc.Text;
If Pos(\\'-\\',Txt)=1 Then
Begin
Delete(Txt,1,1);
EditCalc.Text:=Txt;
End
else EditCalc.Text:=\\'-\\'+EditCalc.Text;
end;
procedure TCalculator.SquareClick(Sender: TObject);
Var I :Extended;
Begin
Clear:=True;
if EditCalc.Text=\\'0\\' then exit;
if EditCalc.Text=\\'\\' then exit;
i:=StrToFloat(EditCalc.Text);
i:=sqr(i);
EditCalc.Text:=FloatToStr(i);
End;

procedure TCalculator.PowerXyClick(Sender: TObject);
Var x,e:Extended;
Begin //power
if (EditCalc.Text=\\'0\\') and not Clear then exit;
if not Clear then begin
Clear:=True;
x:=StrToFloat(EditCalc.text);
// EditCalc.text:=\\'0\\';
end else begin
Clear:=False;
EditCalc.text:=FloatToStr(x);
end;
end;
procedure TCalculator.FactorialClick(Sender: TObject);
Var I,M:extended;
begin
if Pos(\\',\\',EditCalc.text)>0 then begin
Application.messageBox(\\'Real numbers are not allowed!\\',\\'Error\\',MB_Ok+MB_IconStop);
exit;
end;
if EditCalc.text=\\'0\\' then begin
EditCalc.text:=\\'1\\';
exit;
end;
i:=StrToFloat(EditCalc.text);
if i>60 then begin
messageBox(handle,\\'Large value!\\',\\'Error\\',MB_Ok+MB_IconStop);
exit;
end;
m:=i;
Repeat
m:=m-1;
i:=i*m;
until m<=1;
EditCalc.text:=FloatToStr(i);
end;
End.

PANFILO MORENO
04 de Julio del 2008
QUIERO APRENDER MAS DE MI TRABAJO