具体功能为:
1、实现表达式:(1+2)*3 的计算;
2、实现表达式:(合同主表.合同总金额+2)*3 的计算(其中:“合同主表”为后台数据库的一个表,“合同总金额”为“合同主表”的一个字段);
3、实现表达式:SUM(合同主表.合同总金额) 的计算;
4、实现表达式:IF 合同主表.合同总金额>0 THEN 的处理;最好有范例程序。
1、实现表达式:(1+2)*3 的计算;
2、实现表达式:(合同主表.合同总金额+2)*3 的计算(其中:“合同主表”为后台数据库的一个表,“合同总金额”为“合同主表”的一个字段);
3、实现表达式:SUM(合同主表.合同总金额) 的计算;
4、实现表达式:IF 合同主表.合同总金额>0 THEN 的处理;最好有范例程序。
////////////////////////引用[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;
[email protected]
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),测试一下,任何四则运算都可以呀,,