求将一文本框内的公式(字符串)转换成可计算的公式的算法   
  即:在一文本框内输入某公式,可以马上计算出它的值  

解决方案 »

  1.   


    uses
      ComObj;
    Function Caculate(exp: string): string;
    var
      script: Variant;
    begin
      script := CreateOleObject('ScriptControl');
      script.Language := 'JavaScript';
      Result := script.Eval(Exp);
    end;
      

  2.   


    function TForm1.Eval(expStr:   string):   string;
    var
      js:OleVariant;
    begin
      js:=CreateOleObject('ScriptControl');
      js.Language:='JavaScript';
      Result:=js.Eval(expStr);
      js:=Unassigned;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
    begin
      s:=self.Eval('123+234+50');
      self.Label1.Caption:=s;
    end;
      

  3.   

    网上有这样的计算.pas,比较复杂点
      

  4.   

    http://blog.csdn.net/stgsd/archive/2008/11/21/3346002.aspx
    表达式计算器,源码.
      

  5.   

    嗯,顶1楼的方法,使用 ScriptControl 的ActiveX控件是一个比较省事的办法。
      

  6.   

    1楼的朋友的绝对是没有问题的,因为自己最近在作一个类似的功能,也是用这个方法来实现的,并且调试通过了的uses ComObj;
    Function calc(const expression : String):Integer; 
    Var
    sc : OleVariant;
    begin 
    sc := CreateOleObject('MSScriptControl.ScriptControl.1'); 
    sc.Language :='JavaScript';
    result := StrtoInt( sc.eval(expression) ); 
    end;
    调用如下:
    showmessage(inttostr(calc(edit1.text)));
      

  7.   

    用数据库好了
    假定edit1.text='(3+4+5)/2';
    with adoquery1 do
    begin
      close;
      sql.text := 'select ' + edit1.text +' as field1';
      open;
      value := fieldbyname('field1').asfloat;
    end;