|
|

楼主 |
发表于 2008-2-11 14:58:00
|
显示全部楼层
Re:经过几天的努力做了个计算器
include(libwinformstyle.lib);
int intWS,DecimalFlag,NumOps;
float Op1,Op2,TempReadout;
string LastInput,OpFlag;
int int1;
string LeftPart;
procedure InitializeForm;
createwindow("Form","frmMain");
frmMain.Move(1000,1000,3360,3450);
intWS:=GetWindowStyle(frmMain.hwnd);
frmMain.Caption:="Calculator";
intWS:=intWS-WS_SIZEBOX;
SetWindowStyle(frmMain.hwnd,intWS);
createwindow("Label","Readout","frmMain");
frmMain.Readout.Visible:=1;
frmMain.Readout.Move(120,105,3000,375);
frmMain.Readout.BorderStyle:=1;
frmMain.Readout.BackColor:=&H80000005&;
frmMain.Readout.Alignment:=1;
frmMain.Readout.Caption:="0.";
createwindow("Button","Number0","frmMain");
createwindow("Button","Number1","frmMain");
createwindow("Button","Number2","frmMain");
createwindow("Button","Number3","frmMain");
createwindow("Button","Number4","frmMain");
createwindow("Button","Number5","frmMain");
createwindow("Button","Number6","frmMain");
createwindow("Button","Number7","frmMain");
createwindow("Button","Number8","frmMain");
createwindow("Button","Number9","frmMain");
createwindow("Button","Decimal","frmMain");
frmMain.Number0.Move(120,2400,1080,480);
frmMain.Number1.Move(120,1800,480,480);
frmMain.Number2.Move(720,1800,480,480);
frmMain.Number3.Move(1320,1800,480,480);
frmMain.Number4.Move(120,1200,480,480);
frmMain.Number5.Move(720,1200,480,480);
frmMain.Number6.Move(1320,1200,480,480);
frmMain.Number7.Move(120,600,480,480);
frmMain.Number8.Move(720,600,480,480);
frmMain.Number9.Move(1320,600,480,480);
frmMain.Decimal.Move(1320,2400,480,480);
frmMain.Number0.Caption:="0";
frmMain.Number1.Caption:="1";
frmMain.Number2.Caption:="2";
frmMain.Number3.Caption:="3";
frmMain.Number4.Caption:="4";
frmMain.Number5.Caption:="5";
frmMain.Number6.Caption:="6";
frmMain.Number7.Caption:="7";
frmMain.Number8.Caption:="8";
frmMain.Number9.Caption:="9";
frmMain.Decimal.Caption:=".";
frmMain.Number0.Visible:=1;
frmMain.Number1.Visible:=1;
frmMain.Number2.Visible:=1;
frmMain.Number3.Visible:=1;
frmMain.Number4.Visible:=1;
frmMain.Number5.Visible:=1;
frmMain.Number6.Visible:=1;
frmMain.Number7.Visible:=1;
frmMain.Number8.Visible:=1;
frmMain.Number9.Visible:=1;
frmMain.Decimal.Visible:=1;
frmMain.Refresh;
frmMain.Show;
frmMain.Zorder(0);
createwindow("Button","cmdCancel","frmMain");
frmMain.cmdCancel.Move(2040,600,480,480);
frmMain.cmdCancel.Caption:="C";
frmMain.cmdCancel.Visible:=1;
createwindow("Button","cmdCancelEntry","frmMain");
frmMain.cmdCancelEntry.Move(2640,600,480,480);
frmMain.cmdCancelEntry.Caption:="CE";
frmMain.cmdCancelEntry.Visible:=1;
createwindow("Button","cmdAdd","frmMain");
frmMain.cmdAdd.Move(2040,1200,480,480);
frmMain.cmdAdd.Caption:="+";
frmMain.cmdAdd.Visible:=1;
createwindow("Button","cmdSubtract","frmMain");
frmMain.cmdSubtract.Move(2640,1200,480,480);
frmMain.cmdSubtract.Caption:="-";
frmMain.cmdSubtract.Visible:=1;
createwindow("Button","cmdMultiply","frmMain");
frmMain.cmdMultiply.Move(2040,1800,480,480);
frmMain.cmdMultiply.Caption:="*";
frmMain.cmdMultiply.Visible:=1;
createwindow("Button","cmdDivide","frmMain");
frmMain.cmdDivide.Move(2640,1800,480,480);
frmMain.cmdDivide.Caption:="/";
frmMain.cmdDivide.Visible:=1;
createwindow("Button","cmdCalculate","frmMain");
frmMain.cmdCalculate.Move(2040,2400,480,480);
frmMain.cmdCalculate.Caption:="=";
frmMain.cmdCalculate.Visible:=1;
createwindow("Button","cmdPercent","frmMain");
frmMain.cmdPercent.Move(2640,2400,480,480);
frmMain.cmdPercent.Caption:="%";
frmMain.cmdPercent.Visible:=1;
Redraw(frmMain.hwnd);
createwindow(" ictureBox","GetKey","frmMain");
frmMain.GetKey.Move(-100,-100,100,100);
frmMain.GetKey.Visible:=1;
frmMain.GetKey.SetFocus;
endprocedure;
procedure Prepare;
DecimalFlag:=0;
NumOps:=0;
LastInput:="NONE";
OpFlag:=" ";
Readout:="0.";
endprocedure;
procedure frmMain.cmdCancel_Click;
frmMain.Readout.Caption:="0.";
Op1:=0;
Op2:=0;
frmMain.GetKey.SetFocus;
endprocedure;
procedure frmMain.cmdCancelEntry_Click;
frmMain.Readout.Caption:="0.";
DecimalFlag:=0;
LastInput:="CE";
frmMain.GetKey.SetFocus;
endprocedure;
procedure frmMain.Decimal_Click;
if(LastInput="NEG");
Readout:="-0.";
exit;
endif;
if(LastInput="NUMS");
Readout:="0."
exit;
endif;
DecimalFlag:=1;
LastInput:="NUMS";
frmMain.GetKey.SetFocus;
endprocedure;
procedure InputNumber(int WhichNumber);
if(LastInput<>"NUMS");
frmMain.Readout.Caption:=".";
DecimalFlag:=0;
endif;
if(DecimalFlag=1);
frmMain.Readout.Caption:=(frmMain.Readout.Caption)(WhichNumber);
else;
int1:=inStr(1,frmMain.Readout.Caption,".");
LeftPart:=left(frmMain.Readout.Caption,int1-1);
frmMain.Readout.Caption:=(LeftPart)(WhichNumber)(".");
endif;
if(LastInput="NEG");
frmMain.Readout.Caption:=("-")(frmMain.Readout.Caption);
endif;
LastInput:="NUMS";
frmMain.GetKey.SetFocus;
endprocedure;
procedure frmMain.GetKey_KeyPress(int KeyAscii);
if((KeyAscii>47)&&(KeyAscii<58));
InputNumber(KeyAscii-48);
else;
switch(KeyAscii);
case(43);
call Operator(1);
break;
case(45);
call Operator(3);
break;
case(42);
call Operator(2);
break;
case(47);
call Operator(0);
break;
case(37);
call frmMain.cmdPercent_Click;
break;
case(27);
call frmMain.cmdCancel_Click;
break;
case(46);
call frmMain.cmdCancelEntry_Click;
break;
case(13);
call Operator(4);
break;
endswitch;
endif;
endprocedure;
procedure frmMain.Number0_Click;
if(frmMain.Readout.Caption<>"0.");
InputNumber(0);
endif;
frmMain.GetKey.SetFocus;
endprocedure;
procedure frmMain.Number1_Click;
InputNumber(1);
endprocedure;
procedure frmMain.Number2_Click;
InputNumber(2);
endprocedure;
procedure frmMain.Number3_Click;
InputNumber(3);
endprocedure;
procedure frmMain.Number4_Click;
InputNumber(4);
endprocedure;
procedure frmMain.Number5_Click;
InputNumber(5);
endprocedure;
procedure frmMain.Number6_Click;
InputNumber(6);
endprocedure;
procedure frmMain.Number7_Click;
InputNumber(7);
endprocedure;
procedure frmMain.Number8_Click;
InputNumber(8);
endprocedure;
procedure frmMain.Number9_Click;
InputNumber(9);
endprocedure;
procedure frmMain.cmdAdd_Click;
Operator(1);
endprocedure;
procedure frmMain.cmdSubtract_Click;
Operator(3);
endprocedure;
procedure frmMain.cmdMultiply_Click;
Operator(2);
endprocedure;
procedure frmMain.cmdDivide_Click;
Operator(0);
endprocedure;
procedure frmMain.cmdCalculate_Click;
Operator(4);
endprocedure;
procedure Operator(int Index);
TempReadout:=frmMain.Readout.Caption;
if(LastInput="NUMS");
NumOps:=NumOps+1;
endif;
switch(NumOps);
case(0);
if((Index=3)&&(LastInput<>"NEG"))
frmMain.Readout.Caption:=("-")(frmMain.Readout.Caption);
LastInput:="NEG";
endif;
break;
case(1);
Op1:=frmMain.Readout.Caption;
if((Index=3)&&(LastInput<>"NUMS")&&(OpFlag<>"="));
frmMain.Readout.Caption:="-";
LastInput:="NEG";
endif;
break;
case(2);
Op2:=TempReadout;
switch(OpFlag);
case("+");
Op1:=Op1+Op2;
break;
case("-");
Op1:=Op1-Op2;
break;
case("*");
Op1:=Op1*Op2;
break;
case("/");
if(Op2=0);
messagebox("Divide by zero");
else;
Op1:=Op1/Op2;
endif;
break;
case("=");
Op1:=Op2;
break;
case("%");
Op1:=Op1*Op2;
endswitch;
frmMain.Readout.Caption:=Op1;
int1:=inStr(1,frmMain.Readout.Caption,".");
if(int1=0);
frmMain.Readout.Caption:=(frmMain.Readout.Caption)(".");
endif;
NumOps:=1;
break;
endswitch;
if(LastInput<>"NEG");
LastInput:="OPS";
switch(Index);
case(0);
OpFlag:="/";
break;
case(1);
OpFlag:="+";
break;
case(2);
OpFlag:="*";
break;
case(3);
OpFlag:="-";
break;
case(4);
OpFlag:="=";
break;
endswitch;
endif;
frmMain.GetKey.SetFocus;
endprocedure;
procedure frmMain.cmdPercent_Click;
float floatTemp;
floatTemp:=frmMain.Readout.Caption;
floatTemp:=floatTemp/100;
frmMain.Readout.Caption:=(floatTemp);
LastInput:="Ops";
OpFlag:="%";
NumOps:=NumOps+1;
DecimalFlag:=True;
frmMain.GetKey.SetFocus;
endprocedure;
procedure main;
InitializeForm;
Prepare;
endprocedure; |
|