Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sumar edit en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=54086)

georgejg 08-03-2008 17:00:42

sumar edit en tiempo de ejecucion
 
:) 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:
Cita:

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
Código Delphi [-]
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

Cita:

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

Código Delphi [-]
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
Código Delphi [-]
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 )

Código Delphi [-]
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

Cita:

Empezado por fidel (Mensaje 271883)
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

Cita:

Empezado por ixMike (Mensaje 271885)
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

solucionado
 
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

Código Delphi [-]
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:

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 11:11:25.

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