初学者:关于speedbutton 的tag 属性,一个问题。

Babbit 2004-03-17 07:14:48
这是一个简单的计算器程序: 运算按钮:sb11,.. sb42

将所有的caption属性是操作符的speedbutton 组件的onclick事件句柄都指向一个事件!在该事件中对说有的单击事件进行统一处理,将speedbutton的tag属性值赋给全局变量: operator verable!
不懂为什么只有sb1,其他的都没有设置?


procedure TFrm_Main.SB11Click(Sender: TObject);//______here

begin
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;
...全文
66 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dance_code 2004-03-17
  • 打赏
  • 举报
回复
把你目录下面的*.dcu删掉,重新编译试试看

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧