Hola:
Bueno, creo que a lo que se refiere Magneto es a identificar los comandos que se escriben en el Edit y a traducirlo en operaciones matemáticas.
Lo que pides te va a costar un poco bastante de implementar, aunque seguro que ya hay por ahí algo hecho. Si te sirve de orientación mírate la clase
TParser en la unit
classes, y mejor aún la clase
TExprParser en la unit
dbcommon que es utilizada por Delphi para analizar sentencias SQL. Te puede servir como ejemplo para ir desmenuzando los elementos de una cadena en operaciones simples.
A modo de orientación, deberás definirte un conjunto de todas las operaciones posibles, y a medida que vas desmenuzando la cadena, ir almacenando las operaciones en un array (junto a los factores / sumandos ... asociados), por orden de ejecución (mirar los paréntesis) para luego pasarle a una rutina inteligente ese array y que te genere coordenadas
Y, a partir de coordenadas
X.
Un ejemplo al vuelo de esto último:
Código:
TOperacion = (opSuma, opResta, opProducto, opDivision);
TNodoOperacion = class
private
FOperacion : TOperacion;
public
constructor Create (AOperacion : TOperacion);
function DevuelveValor (AParametros: array of Double) : Double;
end;
constructor TNodoOperacion.Create (AOperacion : TOperacion);
begin
FOperacion := AOperacion;
end;
function TNodoOperacion.DevuelveValor (AParametros: array of Double) : Double;
var
i : Integer;
begin
result := 0;
Case FOperacion of
opSuma : for i:=Low(AParametros) to High (AParametros) do
Inc(result, AParametros[i]);
opResta : ...
opProducto : ...
opDivision : ...
end;
end;
De esta forma al analizar la cadena, vas creas objetos del tipo TNodoOperacion, en el Create les pasas el tipo de Operacion que es cada uno. Para esa lista te puedes valer de un TList, que te permite inserciones, puesto que al analizar la cadena no puedes saber de antemano si las operaciones que vas encontrando se analizarán en el mismo orden.
Una vez confeccionada la lista, no hay más que recorrerla e ir calculando valores.