这是一个简单的计算器程序: 运算按钮:sb11,.. sb42将所有的caption属性是操作符的speedbutton 组件的onclick事件句柄都指向一个事件!在该事件中对说有的单击事件进行统一处理,将speedbutton的tag属性值赋给全局变量: operator verable!
不懂为什么只有sb1,其他的都没有设置?
[code]procedure TFrm_Main.SB11Click(Sender: TObject);//______herebegin
Operator:=(Sender as TSpeedButton).Tag;
end;//我试着在另外一个程序中使用这种方法,但其他的运算符号都不起作用,也就是所有的运算都归为了+加法运算procedure TFrm_Main.SB51Click(Sender: TObject);
begin
E1.Clear;
E2.Clear;
E_Result.Clear;
end;procedure TFrm_Main.SB52Click(Sender: TObject);
var
num1,num2,resultnum:Double;
i:integer;
//所有的异常处理集中在此,开始… …
begin
try
num1:=StrToFloat(E1.Text);
except
num1:=0;
E1.Text:='0';
end; case Operator of
11,21,31,41,13:
begin
try
num2:=StrToFloat(E2.Text);
except
num2:=0;
E2.Text:='0';
end;
end;
end; case Operator of
41,32:
if num2=0 then
begin
E_Result.Text:='除数为零';
Exit;
end;
22,43:
if num1<0 then
begin
E_Result.Text:='输入无效';
Exit;
end
else if num1<1 then
begin
resultnum:=0;
E_Result.Text:=FloatToStr(resultnum);
Exit;
end;
14:
if num1<=0 then
begin
E_Result.Text:='函数的输入无效';
Exit;
end;
end;
//异常处理结束。
case Operator of
11:
resultnum:=num1+num2;
21:
resultnum:=num1-num2;
31:
resultnum:=num1*num2;
41:
resultnum:=num1/num2;
12:
resultnum:=num1*0.01;
22:
resultnum:=Sqrt(num1);
32:
resultnum:=1/num1;
42:
resultnum:=Exp(num1);
13:
resultnum:=Exp(num2*ln(num1));
23:
resultnum:=num1*num1*num1;
33:
resultnum:=num1*num1;
43:
begin
resultnum:=1;
for i:=1 to Trunc(num1) do
resultnum:=resultnum*i;
end;
14:
resultnum:=ln(num1);
24:
resultnum:=sin(num1);
34:
resultnum:=cos(num1);
44:
resultnum:=tan(num1);
end;
E_Result.Text:=FloatToStr(resultnum);
end;
[/code]
不懂为什么只有sb1,其他的都没有设置?
[code]procedure TFrm_Main.SB11Click(Sender: TObject);//______herebegin
Operator:=(Sender as TSpeedButton).Tag;
end;//我试着在另外一个程序中使用这种方法,但其他的运算符号都不起作用,也就是所有的运算都归为了+加法运算procedure TFrm_Main.SB51Click(Sender: TObject);
begin
E1.Clear;
E2.Clear;
E_Result.Clear;
end;procedure TFrm_Main.SB52Click(Sender: TObject);
var
num1,num2,resultnum:Double;
i:integer;
//所有的异常处理集中在此,开始… …
begin
try
num1:=StrToFloat(E1.Text);
except
num1:=0;
E1.Text:='0';
end; case Operator of
11,21,31,41,13:
begin
try
num2:=StrToFloat(E2.Text);
except
num2:=0;
E2.Text:='0';
end;
end;
end; case Operator of
41,32:
if num2=0 then
begin
E_Result.Text:='除数为零';
Exit;
end;
22,43:
if num1<0 then
begin
E_Result.Text:='输入无效';
Exit;
end
else if num1<1 then
begin
resultnum:=0;
E_Result.Text:=FloatToStr(resultnum);
Exit;
end;
14:
if num1<=0 then
begin
E_Result.Text:='函数的输入无效';
Exit;
end;
end;
//异常处理结束。
case Operator of
11:
resultnum:=num1+num2;
21:
resultnum:=num1-num2;
31:
resultnum:=num1*num2;
41:
resultnum:=num1/num2;
12:
resultnum:=num1*0.01;
22:
resultnum:=Sqrt(num1);
32:
resultnum:=1/num1;
42:
resultnum:=Exp(num1);
13:
resultnum:=Exp(num2*ln(num1));
23:
resultnum:=num1*num1*num1;
33:
resultnum:=num1*num1;
43:
begin
resultnum:=1;
for i:=1 to Trunc(num1) do
resultnum:=resultnum*i;
end;
14:
resultnum:=ln(num1);
24:
resultnum:=sin(num1);
34:
resultnum:=cos(num1);
44:
resultnum:=tan(num1);
end;
E_Result.Text:=FloatToStr(resultnum);
end;
[/code]
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货