Club Delphi,
Otra opción para evaluar expresiones en Delphi
Revisen este código :
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CalcExpress, Math;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Expr1: TEdit;
Expr2: TEdit;
Vars: TMemo;
Values: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ResultExpr1: TLabel;
ResultExpr2: TLabel;
CalcExpress1: TCalcExpress;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ResultExpr1.Caption := EmptyStr;
ResultExpr2.Caption := EmptyStr;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Expr1.Text <> EmptyStr then
begin
try
CalcExpress1.Formula := Expr1.Text;
ResultExpr1.Caption := 'Result: ' + FloatToStr(RoundTo(CalcExpress1.calc([]),-6));
except
ResultExpr1.Caption := EmptyStr;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
args : Array of Extended;
i : Integer;
begin
if (Vars.Lines.Count = Values.Lines.Count) and (Expr2.Text <> EmptyStr) then
begin
try
CalcExpress1.Formula := Expr2.Text;
CalcExpress1.Variables:= Vars.Lines;
SetLength(args,Values.Lines.Count);
for i := 0 to Values.Lines.Count - 1 do
args[i] := StrToFloat(Values.Lines[i]);
ResultExpr2.Caption := 'Result: ' + FloatToStr(RoundTo(CalcExpress1.calc(args),-6));
except
ResultExpr2.Caption := EmptyStr;
end;
end
else
MessageDlg('Error en Expresión, Variables o Valores',mtError,[mbOK],0);
end;
end.
El código anterior
realiza una evaluación de expresiones por medio del componente TCalcExpress (Freeware), como se puede ver en la siguiente imagen:
Consulten este link:
Espero sea útil
Nelson.