具体功能为:
1、实现表达式:(1+2)*3 的计算;
2、实现表达式:(合同主表.合同总金额+2)*3 的计算(其中:“合同主表”为后台数据库的一个表,“合同总金额”为“合同主表”的一个字段);
3、实现表达式:SUM(合同主表.合同总金额) 的计算;
4、实现表达式:IF 合同主表.合同总金额>0 THEN 的处理;最好有范例程序。

解决方案 »

  1.   


    ////////////////////////引用[huluobowangmeng(笨到底)] ///////////////////////To: S.F.(CSDN:896410000) 你的这个东西不好用的!以前我也问过这个问题!!结果有一位老兄(其实就是你)就给了我们这个东西!!出了错误。不信你试试。10*(1+2)+20结果等于230!!!
    后来没办法我自己就写了一个!!很好用的!!!费了我一整天时间才写出来//////////////////////////////////////////////////////////////////////
    实在不好意思;我又写了个简单的TParserEdit ,哈,这个保证不会错,使用了vbScript//////////// TParserEdit for Microsoft scriptControl ////////////
    // version 1.0
    // Author :s.f.
    // Date : 2004/3/25
    /////////////////////////////////////////////////////////////////unit uParserEdit;interfaceuses
      Windows,SysUtils, Variants, Classes, ComObj, StdCtrls;
    type
      TParserEdit = class(TEdit)
      private
        function getEvaluatedVariant: Variant;
      public
        property TextValue: Variant read getEvaluatedVariant;
      end;procedure Register; //这里可以注解掉,不注册为静态组件,需要动态建立
    implementationprocedure Register;                     //不注册请注解该过程
    begin
      RegisterComponents('IBSSoft', [TParserEdit]);
    end;function TParserEdit.getEvaluatedVariant: Variant;
    var
      Parser            : OleVariant;
      Tls               : TStrings;
      Code              : string;
    begin
      Code := Text;
      try
        Parser := CreateOLEObject('ScriptControl');
        try
          try
            Parser.Language := 'VbScript';
            Parser.AllowUI := TRUE;
            Result := Parser.Eval(Code);
          except
            Tls := TstringList.Create;
            try
              with Tls do
              begin
                Add('错误号:' + inttostr(Parser.Error.Number));
                Add('源:' + Parser.Error.Source);
                Add('描述:' + Parser.Error.Description);
                Add('行:' + intToStr(Parser.Error.Line) + ',列:' +
                  Inttostr(Parser.Error.Column));
                Add('代码:' + Parser.Error.Text);
                Add('帮助文件:' + Parser.Error.helpFile);
                Add('帮助主题:' + inttostr(Parser.Error.HelpContext));
              end;
              MessageBox(getforegroundwindow, pchar(Tls.Text), '执行错误',
                mb_ok or mb_IconError);
            finally
              tls.free;
            end;
          end;
        finally
          Parser := null;
        end;
      except
        MessageBox(getforegroundwindow, 'Com 对象错误', '无法解析', mb_ok or
          mb_IconError);
      end;
    end;
    end.
    /////////////测试窗体调用/////////////
    //1.注册为组件
    //2.加入该组件到form
    //3.修改ParserEdit1的text内容为 10*(1+2)+20
    //4.放个button 并编写OnClick事件
    //////////////////////////////////procedure TForm1.Button1Click(Sender: TObject);
    begin
      showmessage(String(ParserEdit1.TextValue));  //取回结果
    end;
      

  2.   

    兄弟,发给我看看,多谢了!!!
    [email protected]
      

  3.   

    var
      vS : Variant;
    begin
      if Key = #13 then
      begin
        vs := CreateOleObject('ScriptControl');
        vs.Language := 'JavaScript';
        try
          Edit2.Text := vs.Eval(Edit1.Text);
        except
          Edit2.Text := '表达式输入错误';
        end;
      end;
    end;
    哈哈,你把你要计算的东西传到edit1.text(或者任意一个string),测试一下,任何四则运算都可以呀,,