Estoy haciendo un programa y necesitaba realizar un cálculo con expresiones. En vez de usar el componente gb.eval, he usado un script de gambas, que lo modifico y ejecuto para que me devuelva el valor de la expresión.
Lo que hago es copiar el script "plantilla" desde el programa al disco duro, allí lo modifico según los valores de la variables y expresión introducida por el usuario, y lo ejecuto, capturando el valor de salida para mostrarlo.
El código del script es el siguiente:
Y el código de la función que lo usa es:
' gambas module file
PUBLIC FUNCTION ecuacion(expresion AS String, OPTIONAL a AS String, OPTIONAL b AS String, OPTIONAL c AS String, OPTIONAL x AS String, OPTIONAL y AS String) AS String
DIM cadena AS String
DIM comando AS String
DIM valor AS String
TRY KILL User.home & "/programa.gbs"
COPY "programa.gbs" TO User.home & "/programa.gbs"
cadena = File.Load(User.home & "/programa.gbs")
IF a <> NULL THEN
cadena = Replace(cadena, "<a>", var.ConvierteComaaPto(a))
ELSE
cadena = Replace(cadena, "<a>", "0")
ENDIF
IF b <> NULL THEN
cadena = Replace(cadena, "<b>", var.ConvierteComaaPto(b))
ELSE
cadena = Replace(cadena, "<b>", "0")
ENDIF
IF c <> NULL THEN
cadena = Replace(cadena, "<c>", var.ConvierteComaaPto(c))
ELSE
cadena = Replace(cadena, "<c>", "0")
ENDIF
IF x <> NULL THEN
cadena = Replace(cadena, "<x>", var.ConvierteComaaPto(x))
ELSE
cadena = Replace(cadena, "<x>", "0")
ENDIF
IF y <> NULL THEN
cadena = Replace(cadena, "<y>", var.ConvierteComaaPto(y))
ELSE
cadena = Replace(cadena, "<y>", "0")
ENDIF
cadena = Replace(cadena, "<formula>", expresion)
File.Save(User.home & "/programa.gbs", cadena)
WAIT 0.1
EXEC ["chmod", "777", User.home & "/programa.gbs"] WAIT
EXEC [User.home & "/./programa.gbs"] TO valor
IF valor <> "" THEN
RETURN Replace(valor, "\n", "")
ENDIF
Message.Info("Posible error en en la expresión, o al realizar la operación")
RETURN 0
END
PUBLIC FUNCTION ConvierteComaaPto(cadena AS String) AS String
RETURN Replace(cadena, ",", ".")
END
PUBLIC FUNCTION ecuacion(expresion AS String, OPTIONAL a AS String, OPTIONAL b AS String, OPTIONAL c AS String, OPTIONAL x AS String, OPTIONAL y AS String) AS String
DIM cadena AS String
DIM comando AS String
DIM valor AS String
TRY KILL User.home & "/programa.gbs"
COPY "programa.gbs" TO User.home & "/programa.gbs"
cadena = File.Load(User.home & "/programa.gbs")
IF a <> NULL THEN
cadena = Replace(cadena, "<a>", var.ConvierteComaaPto(a))
ELSE
cadena = Replace(cadena, "<a>", "0")
ENDIF
IF b <> NULL THEN
cadena = Replace(cadena, "<b>", var.ConvierteComaaPto(b))
ELSE
cadena = Replace(cadena, "<b>", "0")
ENDIF
IF c <> NULL THEN
cadena = Replace(cadena, "<c>", var.ConvierteComaaPto(c))
ELSE
cadena = Replace(cadena, "<c>", "0")
ENDIF
IF x <> NULL THEN
cadena = Replace(cadena, "<x>", var.ConvierteComaaPto(x))
ELSE
cadena = Replace(cadena, "<x>", "0")
ENDIF
IF y <> NULL THEN
cadena = Replace(cadena, "<y>", var.ConvierteComaaPto(y))
ELSE
cadena = Replace(cadena, "<y>", "0")
ENDIF
cadena = Replace(cadena, "<formula>", expresion)
File.Save(User.home & "/programa.gbs", cadena)
WAIT 0.1
EXEC ["chmod", "777", User.home & "/programa.gbs"] WAIT
EXEC [User.home & "/./programa.gbs"] TO valor
IF valor <> "" THEN
RETURN Replace(valor, "\n", "")
ENDIF
Message.Info("Posible error en en la expresión, o al realizar la operación")
RETURN 0
END
PUBLIC FUNCTION ConvierteComaaPto(cadena AS String) AS String
RETURN Replace(cadena, ",", ".")
END
En el formulario principal:
' gambas class file
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
ME.Center
END
PUBLIC SUB ToolButtonCalcular_Click()
DIM lista AS String
TextBoxResultado.text = var.ecuacion(TextBoxExpresion.text, ValueBoxA.value, ValueBoxB.Value, ValueBoxC.value, ValueBoxX.value, valueboxy.value)
lista = Str$(ListViewExpresiones.Count + 1)
ListViewExpresiones.Add(lista, TextBoxExpresion.text & " = " & TextBoxResultado.text)
END
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
ME.Center
END
PUBLIC SUB ToolButtonCalcular_Click()
DIM lista AS String
TextBoxResultado.text = var.ecuacion(TextBoxExpresion.text, ValueBoxA.value, ValueBoxB.Value, ValueBoxC.value, ValueBoxX.value, valueboxy.value)
lista = Str$(ListViewExpresiones.Count + 1)
ListViewExpresiones.Add(lista, TextBoxExpresion.text & " = " & TextBoxResultado.text)
END
calculadora-0.0.1.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | calculadora-0.0.1.tar.gz | |
Tamaño: | 10.15 KB | |
Descargado: | 23 veces |
calculadora-0.0.1.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | calculadora-0.0.1.tar.gz | |
Tamaño: | 10.15 KB | |
Descargado: | 23 veces |
calculadora-0.0.1.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | calculadora-0.0.1.tar.gz | |
Tamaño: | 10.15 KB | |
Descargado: | 23 veces |