Ver Mensaje Individual
  #15  
Antiguo 27-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { Private declarations }
  public
    { Public declarations }
  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.

Última edición por nlsgarcia fecha: 27-09-2013 a las 21:52:17.
Responder Con Cita