Multiplicacion automatica con edits

Necesito trabajar con decimales en una multiplicación se que los dbedit son .text tipos (string) y que se debe convertir cadena a numero y viceversa para poder trabajarlos y que se muestre el resultado.
Mi cuestión es la siguiente tengo el siguiente código:
// He colocado tres edits y en el ultimo es que se mostrara el resultado de la suma //cuando demos clic
var
n1, n2, suma: integer
begin
suma:= strtoint(edit1.text) + strtoint (edit2.text);
edit3.text:= inttostr (suma);
end;
end.
El resultado se mostrara cuando doy un clic.
Disculpa que lo ilustre lo que pasa es que lo necesito para poder explicarte que es lo que necesito.
Se que dando clic se muestra el resultado, lo que pasa es que necesito que teniendo 4 dbedit el primero es precio (dbedit1), el segundo es descuento (dbedit2) el tercero es impuesto (dbedit3) y el ultimo es precio total (dbedit4) se realize la multiplicación de los tres primeros y se muestren en el cuarto (trabajando con decimales), para después insertar todos los datos en la base de datos que tengo.
Quisiera que me dijeras que función me permite hacer el calculo automáticamente sin tener que usar un botón solamente que vaya ingresando los datos.
Este de aquí abajo es el código que estoy utilizando para hacer los cálculos
con este código que es el que actualmente estoy usando te voy a explicar mejor que es lo que quiero y así podrás explicarme que estoy haciendo mal.
var
precio, descuento, preciototal: currency;
const
impuesto:double= 1.6;
begin
precio:= strtofloat(edit1.text);
descuento:=strtofloat (edit3.text);
preciototal:= (precio*itbis*descuento);
edit4.text:= floattostr (precioTotal);
Realmente hay ciertos tipos en delhi que me confunden, yo no lo estoy trabajando primero en el dbedit sino que lo hice primero en con edits para ver si me salia bien, pero no he tenido los resultados esperados. Primero que todo tengo las variables precio (edit1), impuesto (edit2), descuento(edit3), y el preciototal(edit4), el impuesto lo he establecido como una constante porque quiero agregar un checkbox que lo habilite o lo deshabilite en la multiplicación debido a que no todos los productos llevan impuestos, pero como no me ha salido lo que quiero primero (que es poder mostrar y que se realicen las multiplicaciones) lo he estado pensando para después.
Mi problema actual es que quiero que cuando introduzca un valor en precio como por ejemplo 20 se marque 20.00 donde los ceros marcan los centavos pero con el código obligatoriamente tengo que marcar 20 porque sino me da error, ademas que cuando lo inserte necesito que se visualice al mismo tiempo en preciototal y no lo hace. Ademas lo mismo pasa cuando introduzco el descento solo me permite trabajar con números enteros y no con decimales. Se que estoy perdido y a lo mejor estoy pretendiendo demasiado, me podrías ayudar y aconsejar como podría hacerlo mejor (espero no haberte exigido mucho) (realmente me sentiría bien si me pudieras ayudar con lo que puedas).

1 Respuesta

Respuesta
Ok, mira como tienes DBEdit, esto significa que los tienes conectados a alguna tabla y campo a través de un dataSource... ¿correcto?
Bueno entonces estos calculas que quieres hacer no se hacen drectamente con los DBEdits, sino con los campos de la tabla que tienes conectados a dichos DBEdits.
El componente DataSource que estas usando para conectar los DBEdits, tiene un evento que se llama OnDataChange:
Dentro de este evento haremos los caculos, los cuales se reflejaran automáticamente en nuestro DBEdits:
Ejemplo:
Procedure TForm1.DataSource1DataChange(sender: TObject; Field:TField);
begin
if (Field = Table1PRECIO) then
 Table1PrecioTotal.Value = Table1PRECIO.Value - Table1DESCUENTO.Value;
end;
Explicación:
Este evento se dispara cuando tu modificas algún campo de la tabla, osea al modificar el valor de un DBEdit, entonces la variable Field es el campo que estas modificando esto es automático, por lo tanto solo tenemos preguntar si es igual digamos a PRECIO, entonces si es si, hace el calculo, en donde PrecioTotal sera modificado y al ser modificado, este se reflejara automáticamente en tu DBEdit de PrecioTotal.
Gracias por explicarme, dejame ver si voy entendiendo me estas diciendo que realice los cálculos directamente con los campos de las tablas, ok entiendo eso, pero te voy a ser sincero soy un poco lento en esto de la programación soy un total novato. Creo entender la forma como me dices que haga los cálculos.
Necesitare un poco más de tu ayuda, vamos a olvidarnos por un momento de los dbedits y las tablas y quisiera que me ayudaras paso a paso. Lo que tengo que hacer con los dbedit primero los estoy realizando en edits y después los pego a una tabla en mi base de datos, lo de insertar me sale bien ahora quiero mejorar lo de los caculos, y necsitare detallarte un poco por donde voy para que me puedas ayudar, realmente agradecería que lo hicieras ya realmente estoy trancado en esta parte.
Primero:
. Estoy trabajando con tres editts: precio (edit1text), impuesto (edit2.text) y preciototal (edit3.text).
. Mi declaración de variable es como sigue:
var
precio,impuesto, preciototal: double;
begin
precio:= strtocurr(edit1.text);
...
Después realizo la multiplicación de precio por impuesto y me muestra el valor de precio total sin usar un botón para ello estoy usando el evento onclick en (edit1.text y edit2.text) y el onchange (en el edit3.text).
. Mi problema radica en que quisiera dejar la casilla de impuesto vacía y que en preciototal solo se refleje el valor del precio, lo que pasa es que al dar el clic para terminar (por el evento onclic) me marca un error diciendo que no es un valor point float válido .
(Lo que más quisiera es poder establecer en delphique> por ejemplo
si tienes los dos valores multiplicamelos pero si no tienes valor en impuesto muestra el valor de edit1 (que es precio) en edit3 (que es preciototal) sin realizar la multiplicación para después poder pegarlo en la tabla.
Lo de lograr pegarlo en la base de datos gracias a este foro creo poder realizarlo, lo que más me tiene en apuro y espero que me puedas ayudar en los de como tratar la multiplicación cuando tengo un campo vacío. Gracias y espero no ser muy molesto, porque he visto que he escrito demasiado, disculpa
Bueno para hacer las operaciones con puros edits... usa el evento change de los edits, este evento se dispara cuando modificas el texto de un edit... lógicamente solo valida que el edit no este vacío para que al convertirlo a entero o double o flotante.. no te vaya a tronar.. digamos:
Tienes Precio, impuesto, total, entonces en los eventos change, de cada Edit pones tu operación, así cuando modifiques ya sea impuesto o el precio, este se refleje automáticamente en el total..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas