Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   sumar edits (https://www.clubdelphi.com/foros/showthread.php?t=46884)

Kamael 12-08-2007 21:46:01

sumar edits
 
pues eso. Como se pueden sumar dos edits para que el resultado se cargue en otro edit al estilo excell, es decir, que te lo sume sin tener que pulsar ningun boton.

Delphius 12-08-2007 21:55:34

Hola Kamael,
¿Por sumar te refieres a concatenar? O, lo que deseas es ¿Sumar dos números?

Código Delphi [-]
//Para concatenar el contenido de 2 edits:

Edit3.Text := Edit1.Text + Edit2.Text;

//Para sumar dos valores (suponiendo que son integer) y mostrarlos en un edit:

Edit3.Text := IntTostr( StrToInt(Edit1.Text) + StrToInt(Edit2.Text);

Con respecto a lo que dices: sin tener que usar un botón... habría que ver.. hay muchos eventos en donde se puede conseguir esto... si puedes indicarnos mejor que lo que quieres conseguir, podríamos decirte cual de los eventos es el que mejor se adapta a tu necesidad.

Saludos,

Kamael 12-08-2007 22:03:33

sumar dos edits
 
Necesito sumar dos numeros y el resultado expresarlo en otro edit, es decir,coloco en un edit1 el numero 2 y automaticamente en el edit resultado me tiene que poner un dos, si en el edit2 coloco un cinco en el edit resultado me tiene que poner el resultado de la sume(7).
Gracias por responder

Delphius 12-08-2007 22:13:59

Bueno... mirá te doy un código. Se puede optimizar... Por ahora, yo me valgo del evento OnChange. Una vez que se cambia el valor del edit1 y/o edit2 se llama a un procedimiento que se encarga de calcular la suma y mostrar el valor.
Se puede hacer de otra forma... te la dejo a estudio:

Código Delphi [-]
procedure TForm1.Actualiza;
var suma: integer;
begin
  suma := Nro1 + Nro2;
  Edit3.Text := IntToStr(suma);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Nro1 := StrToInt(Edit1.Text);
  Actualiza;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  Nro2 := StrToInt(Edit2.Text);
  Actualiza;
end;

Saludos,

Caral 12-08-2007 22:20:37

Hola
En el evento OnChange del edit2, osea del segundo dato:
Código Delphi [-]
procedure TForm1.Edit2Change(Sender: TObject);
begin
  Edit3.Text := FloatToStr(StrToFloat(Edit1.Text) + StrToFloat(Edit2.Text));
end;
El resultado de la suma del edit1 + edit2 se vera en edit3.
Ojo, si borras el numero, osea lo dejas en blanco, en el edit2 generara un error.
Saludos

droguerman 12-08-2007 22:38:49

para manejar espacios en blanco y similares sugiero:
Código Delphi [-]
procedure TForm1.Edit2Change(Sender: TObject);
begin
  Edit3.Text := FloatToStr(StrToFloatDef(Edit1.Text,0) + StrToFloatDef(Edit2.Text,0));
end;
porque tu sabes los usuarios...

salvica 12-08-2007 22:43:56

Hola
Cita:

Empezado por Caral (Mensaje 222384)
Hola
...
Ojo, si borras el numero, osea lo dejas en blanco, en el edit2 generara un error.
Saludos


No necesariamente;)
Código Delphi [-]

procedure TForm1.Actualiza( Valor1, Valor2:string );
var 
  Nro1, Nro2 : real;
begin
{ evitar el error si se mete una letra, o se deja en blanco }
  Nro1       := StrToFloatDef( Valor1, 0 );
  Nro2       := StrToFloatDef( Valor2, 0 );
{ ver el resultado }
  Edit3.Text := FloatToStr( Nro1+Nro2 );
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Actualiza( Edit1.Text, Edit2.Text );
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  Actualiza( Edit1.Text, Edit2.Text );
end;
Saludos

Caral 12-08-2007 22:45:17

Hola
No conocia esta,Def, esta genial maestro.
Saludos

ArdiIIa 12-08-2007 22:45:47

A ver si lo resumimos:
Edit1 y Edit2 en su evento onChange apuntan al mismo procedure: SUMA.
Código Delphi [-]
procedure TForm1.Suma(Sender: TObject);;
begin
Edit3.Text := IntToStr( StrToIntDef(Edit1.Text,0) + StrToIntDef(Edit2.Text,0) );
end;

En el caso de que alguna de las entradas sea incorrecta (letras, espacios), no se produce error, sino el valor devuelto es cero...

ArdiIIa 12-08-2007 22:46:29

Se me han adelantado con el DEF

Delphius 12-08-2007 22:48:29

Cita:

Empezado por droguerman
porque tu sabes los usuarios...

Es cierto, se deben comprobar los espacios en blancos, y si lo escrito es válido.. y otras cosas..

Mi código es simple, y como dije: debe ser mejorado. Mi intención es darle una idea de como proceder.

Por otro lado yo entendí que independientemente del edit en donde se cambie el valor, se calcule el total. Pues como leí esto:

Cita:

coloco en un edit1 el numero 2 y automaticamente en el edit resultado me tiene que poner un dos, si en el edit2 coloco un cinco en el edit resultado me tiene que poner el resultado de la sume(7)
Por eso yo hago "actualizar" el valor en cuanto cambie el contenido de edit1 o edit2.

Saludos,

Caral 12-08-2007 22:49:39

Hola
Hay que indicarle a nuestro amigo Kamael que:
StrToIntDef, se usa para numeros reales
StrToFloatDef, se usa para numeros con decimales
Saludos

ArdiIIa 12-08-2007 23:17:46

Son funciones muy prácticas para evitar errores.
Lo normal es ponerlo con algún número negativo para comprobar...

Ejemplo

Código Delphi [-]
If  StrToIntDef(Edit1.Text,-1) = -1 then Valor_Incorrecto

Kamael 12-08-2007 23:52:14

sumar edits
 
Muchisimas gracias a todos.
Lo pondre en practica mañana.
Ahora tengo las ideas mas claras y creo que ya se como hacerlo.
Ya os comentare el resultado.

Matiax13 06-03-2015 21:25:20

hola, como estan?
donde tengo q poner este procedimiento
procedure TForm1.Actualiza;?

Casimiro Notevi 06-03-2015 23:02:46

Donde quieras, al final, por ejemplo.

AgustinOrtu 07-03-2015 07:11:58

Yo para estas cosas en lugar de TEdit prefiero usar componentes TSpinEdit, que son especificos para numeros

Código Delphi [-]
procedure TForm2.SpinEdit1Change(Sender: TObject);
begin
  Edit1.Text := IntToStr(SpinEdit1.Value + SpinEdit2.Value);
end;

Usaria el mismo evento para el OnChange de dos SpinEdit1 y SpinEdit2, y se mostraria la suma en un Edit1

Incluso se pueden dejar los SpinEdit vacios y no genera excepciones

salvica 12-03-2015 19:18:55

Cita:

Empezado por Matiax13 (Mensaje 489700)
hola, como estan?
donde tengo q poner este procedimiento
procedure TForm1.Actualiza;?

Como te dice Casimiro Notevi, puedes ponerlo en cualquier sitio, pero si al procedimiento Actualiza le antepones el TForm1, OBLIGATORIAMENTE debes declararlo en la zona private o public

Saludos a tod@s
Salvica


La franja horaria es GMT +2. Ahora son las 01:41:04.

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