游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2505|回复: 9

经过几天的努力做了个计算器

[复制链接]

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2008-2-11 14:56:00 | 显示全部楼层 |阅读模式
图:
sf_2008211145627.png

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-2-11 14:58:00 | 显示全部楼层

Re: 经过几天的努力做了个计算器

可执行文件:

sf_2008211145738.rar

67.96 KB, 下载次数:

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 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(&quotictureBox","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;

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-2-11 14:59:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

猜猜是什么语言做的,呵呵。

16

主题

280

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
QQ
发表于 2008-2-11 17:48:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

Afflatus???

34

主题

443

帖子

478

积分

中级会员

Rank: 3Rank: 3

积分
478
发表于 2008-2-11 19:12:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

很强,加油

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
发表于 2008-2-12 12:04:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

很好,自己的脚本语言把,不过换我设计的话,肯定设计得和C++风格一致

4

主题

110

帖子

167

积分

注册会员

Rank: 2

积分
167
发表于 2008-2-12 14:22:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

Dephi

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2008-2-13 00:24:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

vb嘛
难道真的那么难以回答?

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2008-2-13 16:57:00 | 显示全部楼层

Re:经过几天的努力做了个计算器

哈,用自己的脚本语言,厉害!!!!!!!!!!!!!!!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 01:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表