PDA

Ver la Versión Completa : sumar edits


Kamael
12-08-2007, 21:46:01
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?

//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
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:

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:

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:

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
Hola
...
Ojo, si borras el numero, osea lo dejas en blanco, en el edit2 generara un error.
Saludos


No necesariamente;)


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.

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
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:

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

If StrToIntDef(Edit1.Text,-1) = -1 then Valor_Incorrecto

Kamael
12-08-2007, 23:52:14
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


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
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