这是一个简单的计算器程序: 运算按钮: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]