PDA

Ver la Versión Completa : sumar edit en tiempo de ejecucion


georgejg
08-03-2008, 17:00:42
:) hola.

les comentare cual es la duda.
quisiera saber como puedo sumar varios edit en "tiempo de ejecucion".

ejemplo:
tengo 5 Tedit donde capturo valores numericos.
un edit al q llamare "Resultado" donde me mustra la suma de los 5 edit.

ahora lo q se quiere es q a medida a van digitando en los edit, me valla mostrando la suma de los mismos en el "Resultado".

no se si me explico bien.

les agradeceria una pronta respuesta.:o
saludos.

fidel
08-03-2008, 17:27:48
En el evento OnKeyPress del primer edit pones:

EditResultado.Text = IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text) + StrToInt(Edit4.Text) + StrToInt(Edit5.Text) );

Después vas a la ventana del evento OnKeyPress del segundo edit y seleccionas el nombre que le dió al primero.

Y lo mismo para el tercero, cuarto y quinto edit.

georgejg
08-03-2008, 17:49:31
gracias por responder Fidel

ahora lo q pasa es q al quere digitar dentro del 1 Edit me lansa un error diciendo exactamente:
is not a valid integer value
es decir q No es un valor de número entero válido
a q se debe esto.

ahora una pregunta listo colo
EditResultado.Text = IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text) + StrToInt(Edit4.Text) + StrToInt(Edit5.Text) );


dentro del evento onKeyPress de todos los 5 edit o a cada edit :confused:

y aq te refieres cuando dices

Después vas a la ventana del evento OnKeyPress del segundo edit y seleccionas el nombre que le dió al primero

saludos

ixMike
08-03-2008, 18:07:07
El error te sale porque al principio los edit están vaciós. Puedes solucionarlo así:


If E1.Text='' then E1.Text:='0';
If E2.Text='' then E2.Text:='0';
If E3.Text='' then E3.Text:='0';
If E4.Text='' then E4.Text:='0';
If E5.Text='' then E5.Text:='0';
EditResultado.Text = IntToStr(StrToInt(E1.Text) + StrToInt(E2.Text) + StrToInt(E3.Text) + StrToInt(E4.Text) + StrToInt(E5.Text));



En cuanto a lo otro, a lo que se refiere es a lo siguiente: pones el código que te he dicho en el evento OnKeyPress de uno de los edits (en E1, por ejemplo). Depués, seleccionas los otros cuatro, te vas al inspector de objetos, a la pesataña de eventos, y en OnKeyPress seleccionas de la lista el que pongo Edit1KeyPress (o E1KeyPress, según hayas llamado al primer edit). Con eso lograrás que todos los Edits tengan el mismo procedure en el evento OnKeyPress.


Salu2.

yusnerqui
08-03-2008, 18:38:59
Creo que con la función StrToIntDef te será muy práctico puesto que no tendrás que esperar que todos los edit se llenen para ir viendo los resultados.
Esto será lo que debes poner en el esvento onkeypress

EditResultado.Text = IntToStr(StrToIntDef(Edit1.Text,0)
+ StrToIntDef(Edit2.Text,0) + StrToIntDef(Edit3.Text,0) +
StrToIntDef(Edit4.Text,0) + StrToIntDef(Edit5.Text,0) );


Espero te ayude

Saludos

fidel
09-03-2008, 20:27:30
Otra manera de evitar el error es .... StrToInt( '0' + Edit.text )


EditResultado.Text = IntToStr(StrToInt('0'+Edit1.Text) + StrToInt('0'+Edit2.Text) + StrToInt('0'+Edit3.Text) + StrToInt('0'+Edit4.Text) + StrToInt('0'+Edit5.Text) );

ixMike
09-03-2008, 20:40:25
Otra manera de evitar el error es .... StrToInt( '0' + Edit.text )


Muy ingenioso :) nunca se me habría ocurrido.

Tomo nota ;)


Salu2.

georgejg
10-03-2008, 14:51:55
Muy ingenioso :) nunca se me habría ocurrido.

Tomo nota ;)


Salu2.
Hola a todos.

retomando con el tema despues de haber realizado las modificaciones de acuerdo a cada una de las recomendaciones, los resultados son los siguientes:

al poner los valores de los edit en '0' efectivamente se elimina el error
"is not a valid integer value" pero el problema ahora es al mostrar el resultado correcto. voy a ser lo mas especifico posible.

ejemplo:
en el Edit1 digito 1. en el editResultado me muestra 0.
Edit2 digito 2. en el editResultado me muestra 1.
Edit3 digito 3. en el editResultado me muestra 3.

si borro el Valor del Edit2 (2) en el editResultado me muestra 6.

otra pruba fue q al hacer alguna modificacion a algun valor de los edit y dar Enter el resultado lo muestra correctamente.

georgejg
10-03-2008, 14:59:01
Primero agradecerles por sus opiniones que fueron muy importantes.:)

ahora la solucion definitiva q se dio fue la siguiente:

podemos colocar el mismo codigo que nos mostro Fidel

EditResultado.Text = IntToStr(StrToInt('0'+Edit1.Text) + StrToInt('0'+Edit2.Text) + StrToInt('0'+Edit3.Text) + StrToInt('0'+Edit4.Text) + StrToInt('0'+Edit5.Text) );

pero no lo colocamos en evento OnKeyPress de los Edit ya que ocurre lo q les comente en el mensaje anterior.

ahora para que me ejecute correctamente lo colocamos en el evento OnChange esto me efectua las modificaciones en "Tiempo de Ejecucion" el codigo final q utilice fue el siguiente:

procedure TUnit_Main.Edit2Change(Sender: TObject);
begin
Edit1.Text:= IntToStr(StrToInt('0'+Edit2.Text) + StrToInt('0'+Edit6.Text) + StrToInt('0'+Edit10.Text) + StrToInt('0'+Edit14.Text) + StrToInt('0'+Edit18.Text) + StrToInt('0'+Edit22.Text) + StrToInt('0'+Edit26.Text));
end;

nuevamente muchas gracias y hasta una proxima oportunidad :D

ixMike
10-03-2008, 18:14:08
Lo que te pasaba antes es porque el evento se ejecutaba antes de que el nuevo número se escribiera en el edit. También te habría valido el evento OnKeyUp.


Salu2.