Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Sumar y multiplicar varios edit automaticamente

Buenas gente, tengo el siguiente problema tengo un form con varios edit estos representan un valor especifico, para ser mas claro el de una moneda por ejemplo billete 1 dolar, 5 dolares, 10 dolares, etc...

Quisiera hacer que al editar el valor de los edit vaya multiplicando y sumando el total

Ejemplo ingreso en el edit1 la cantidad de 10 (cada uno de un dolar) en el edit2 un ejemplo ingreso 5 (de 5 dolares) en estos datos ingresados multiplicar por su valor fijo automáticamente en código para un botón seria algo así como

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
Var  n1,n2,suma: Integer;
 begin   
n1:=strtoint(Edit1.text);   
n2:=strtoint(Edit2.text);  
 suma:= (n1*1) +(n2*5);  
 tedit3:text = inttostr(suma);
 end;
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.
Responder Con Cita
  #2  
Antiguo 05-12-2017
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
Si lo he entendido bien, quieres que se sumen sin necesidad de pulsar un botón, ¿correcto?

En ese caso, podrías capturar el evento "OnExit" de cada campo de edición y poner el mismo código que para el botón. Incluso se podría capturar el evento OnChange.

Eso si, los dos botones tendrían que compartir el código, llamándolo (por ejemplo) "CambiarDatos"

Saludos
Responder Con Cita
  #3  
Antiguo 05-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

¿ Te sirve algo así ?
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  amount: Integer;
begin
  amount := StrToIntDef(Edit1.Text, 0) +      //  1 u$S
            StrToIntDef(Edit2.Text, 0) *  5 + //  5 u$s
            StrToIntDef(Edit3.Text, 0) * 10 + // 10 u$s
            StrToIntDef(Edit4.Text, 0) * 20 + // 20 u$s
            ...
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 05-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Cita:
Empezado por ElKurgan Ver Mensaje
Si lo he entendido bien, quieres que se sumen sin necesidad de pulsar un botón, ¿correcto?

En ese caso, podrías capturar el evento "OnExit" de cada campo de edición y poner el mismo código que para el botón. Incluso se podría capturar el evento OnChange.

Eso si, los dos botones tendrían que compartir el código, llamándolo (por ejemplo) "CambiarDatos"

Saludos
Si estuve probando con el onchange pero siempre trabaje con botones en lo que llevo aprendido por lo que se me complica hacer algo que ejecute lo mismo en muchos edits al mismo tiempo. Un procedimiento tal vez?
Con los "dos botones" te referis a los edit? la idea es hacerlo sin botones

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

¿ Te sirve algo así ?
Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); var amount: Integer; begin amount := StrToIntDef(Edit1.Text, 0) + // 1 u$S StrToIntDef(Edit2.Text, 0) * 5 + // 5 u$s StrToIntDef(Edit3.Text, 0) * 10 + // 10 u$s StrToIntDef(Edit4.Text, 0) * 20 + // 20 u$s ... end;


Saludos
Claro algo asi pero que cambie cuando vaya editando el edit no en boton
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.
Responder Con Cita
  #5  
Antiguo 05-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por The Cid James Ver Mensaje
...
Claro algo asi pero que cambie cuando vaya editando el edit no en boton
Entonces sólo debes situar el mismo código en el evento OnChange de todos los Edits, por ejemplo:
Código Delphi [-]
...
(* Asigno los eventos en tiempo de ejecución para clarificar el ejemplo,
    pero te resultará mas simple hacerlo en tiempo de diseño *)
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.OnChange := EditsChange;
  Edit2.OnChange := EditsChange;
  Edit3.OnChange := EditsChange;
  Edit4.OnChange := EditsChange;
  //...
end;

procedure TForm1.EditsChange(Sender: TObject);
var
  amount: Integer;
begin
  amount := StrToIntDef(Edit1.Text, 0) +      //  1 u$S
            StrToIntDef(Edit2.Text, 0) *  5 + //  5 u$s
            StrToIntDef(Edit3.Text, 0) * 10 + // 10 u$s
            StrToIntDef(Edit4.Text, 0) * 20; // + // 20 u$s
            //...
  Self.Caption := IntToStr(amount);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 06-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Si entiendo bien creo en procedimiento edits onechanges, por ejemplo, y en el formcreate y lo asigno al onchange de cada edit para que se ejecuten?
No comprendo del todo a que te referís con asignarlos a tiempo de ejecución para el ejemplo (se lo que significa esto ultimo)

Gracias y saludos
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.
Responder Con Cita
  #7  
Antiguo 06-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por The Cid James Ver Mensaje
Si entiendo bien creo en procedimiento edits onechanges, por ejemplo, y en el formcreate y lo asigno al onchange de cada edit para que se ejecuten?
No comprendo del todo a que te referís con asignarlos a tiempo de ejecución para el ejemplo (se lo que significa esto ultimo)
En tiempo de ejecución significa que los eventos se asignan cuando se ejecuta el programa, es mas simple hacerlo en tiempo de diseño, pero me resulta mas confuso de explicar en un mensaje.

En tiempo de diseño, seleccionas todos los Edits (Ctrl+Left_Click) y luego generas el evento OnChange desde el Object Inspector para todos ellos.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 06-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Confeccione el ejemplo y te adjunto el código fuente para que lo evalues. (evento asignado en diseño)


Saludos
Archivos Adjuntos
Tipo de Archivo: zip Edits.zip (3,9 KB, 6 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 06-12-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola de nuevo.

Confeccione el ejemplo y te adjunto el código fuente para que lo evalues. (evento asignado en diseño)


Saludos
Y si quiere sumar o multiplicar en números decimales, como seria el código ?
Responder Con Cita
  #10  
Antiguo 06-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Milworm99 Ver Mensaje
Y si quiere sumar o multiplicar en números decimales, como seria el código ?
Puede usar la función StrToFloatDef y cambiar la operación aritmética por la que desee.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 07-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
seria algo asi?

Código Delphi [-]
StrTofloatDef(Edit4.Text, 0) * 20

Ahora me quedo una duda... se puede trabajar con decimales en el tipo integer?
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.
Responder Con Cita
  #12  
Antiguo 07-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por The Cid James Ver Mensaje
seria algo asi?

Código Delphi [-]
StrTofloatDef(Edit4.Text, 0) * 20

Ahora me quedo una duda... se puede trabajar con decimales en el tipo integer?
No, el compilador daría error de compatibilidad de tipos.

Por el contrario, no hay inconveniente en asignar un valor entero a una variable de tipo flotante.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 07-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
uff a cambiar los tipos de la tabla para poder cambiar eso ya que puse el ejemplo solo enteros, pero tambien estoy usando monedas, ahora entiendo porque no me deja copilarlo, entonces la variable amount en el ejemplo que me pasaste tambien tendria que ser flotante?

Saludos

Edit :

Asi funciona bien con decimales

Código Delphi [-]
procedure TFcaja.EditsChange(Sender: TObject);
var
  amount: Currency;
begin
  amount := StrToFloatDef (E1.Text, 0) * 0.1 +   //  1 u$S
            StrToFloatDef(E5.Text, 0) *  5 + //  5 u$s
            StrToFloatDef(E10.Text, 0) * 10+ // 10 u$s
            StrToFloatDef(E2 .Text, 0) * 20 ;// + // 20 u$s
            //...
  EACtotal.Text:= FloatToStr (amount);
end;
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.

Última edición por The Cid James fecha: 07-12-2017 a las 01:44:26.
Responder Con Cita
  #14  
Antiguo 07-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si vas a trabajar con monedas el tipo Currency es el indicado.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 07-12-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Si vas a trabajar con monedas el tipo Currency es el indicado.

Saludos
Y como se hace para el redondeo del resultado en decimales ?
Responder Con Cita
  #16  
Antiguo 07-12-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Se trabajaría con este codigo ?

Código:
FormatFloat('0.0',amount);
Responder Con Cita
  #17  
Antiguo 07-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Aca encontre lo que necesitas

https://www.clubdelphi.com/foros/showthread.php?t=40785

Saludos
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.
Responder Con Cita
  #18  
Antiguo 18-12-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Cita:
Empezado por The Cid James Ver Mensaje
Aca encontre lo que necesitas

https://www.clubdelphi.com/foros/showthread.php?t=40785

Saludos
Código:
function Redondearagag(Valor:Real; Decimal:Integer):Real;
begin
  result := StrToFloat(FloatToStrF(StrToFloat(FloatToStr(Valor)), ffFixed, 18, Decimal));
end;
Como puedo utilizar esa funcion para redondear ?
Lo que yo quiero es que si el resultado es
7.55 lo redondee a 7.60
Responder Con Cita
  #19  
Antiguo 18-12-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Milworm99 Ver Mensaje
...
Lo que yo quiero es que si el resultado es
7.55 lo redondee a 7.60
La función anterior lo hace, solo debes llamarla pasándo el valor 1 al parámetro Decimal.

Te agrego dos opciones diferentes:
Código Delphi [-]
uses Math;

function Redondear(const Value: Double; const Digit: Integer): Double;
begin
  SetRoundMode(rmUp);
  Result := RoundTo(Value, - Digit);
end;


Código Delphi [-]
function Redondear(const Numero: Double; const Digitos: Integer): Double;
var
  m: Double;
begin
  m:= Exp(Ln(10) * Digitos);
  Result:= Round(Numero * m + 5 / m) / m;
end;

Un ejemplo de uso para ambos casos:
Código Delphi [-]
...
begin
  ShowMessageFmt('%8.2f', [ Redondear(7.55, 1) ]);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 18-12-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

La función anterior lo hace, solo debes llamarla pasándo el valor 1 al parámetro Decimal.
Funciona perfectamente, pero en este caso como lo haría para que el resultado me lo muestre en un edit automáticamente sin ningún botón ?

Última edición por Milworm99 fecha: 18-12-2017 a las 17:13:39.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema texto de varios edit a otro edit rafaelon Varios 2 29-07-2017 23:49:02
Multiplicar y sumar en consulta sql sac SQL 2 30-03-2014 18:02:39
Multiplicar un edit con separador de miles rufo Varios 7 14-05-2012 19:41:22
Descargar varios enlaces automáticamente joanfran55 Internet 4 01-03-2009 12:11:04
Cambiar de edit automaticamente CRIS Varios 0 04-07-2003 14:26:18


La franja horaria es GMT +2. Ahora son las 16:07:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi