PDA

Ver la Versión Completa : Suma de Edit


Olenkaguilar
20-03-2014, 00:23:21
Buenas tarde mi consulta es la siguiente tengo 3 Edit, al ingresar un (valor en el Edit1 * valor en el Edit2)+70 = Edit3, osea que automaticamente me aparesca el resultado en el Edit3. Bueno lo intenté al compilar me da un error Project Project1.exe raised exception class EconvertError with Message''''is not a valide integer value., acepto los errores y me funciona bien pero no puedo sumarle el 70

procedure TForm1.FormCreate(Sender: TObject);
var
opcion: integer;
begin
opcion:= StrToInt(Edit1.Text);

case opcion of
1: begin
Edit3.Text := FloatToStr(0.2 * StrToFloatDef(Edit2.Text,0)); // aquí quiero sumarle 70
end;
2: begin
Edit3.Text := FloatToStr(0.35 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
3: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
4: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
5: begin
Edit3.Text := FloatToStr(0.68 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
6: begin
Edit3.Text := FloatToStr(0.7 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
7: begin
Edit3.Text := FloatToStr(0.7 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
8: begin
Edit3.Text := FloatToStr(0.7 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
9: begin
Edit3.Text := FloatToStr(0.68 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
10: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
11: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
12: begin
Edit3.Text := FloatToStr(0.35 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
13: begin
Edit3.Text := FloatToStr(0.25 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
14: begin
Edit3.Text := FloatToStr(0.15 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
15: begin
Edit3.Text := FloatToStr(0.05 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
16: begin
Edit3.Text := FloatToStr(0.15 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
17: begin
Edit3.Text := FloatToStr(0.2 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
18: begin
Edit3.Text := FloatToStr(0.25 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
19: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
20: begin
Edit3.Text := FloatToStr(0.55 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
21: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
22: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
23: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
24: begin
Edit3.Text := FloatToStr(0.65 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
25: begin
Edit3.Text := FloatToStr(0.67 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
26: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
27: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
28: begin
Edit3.Text := FloatToStr(0.45 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
29: begin
Edit3.Text := FloatToStr(0.28 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
30: begin
Edit3.Text := FloatToStr(0.18 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
31: begin
Edit3.Text := FloatToStr(0.1 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
32: begin
Edit3.Text := FloatToStr(0.1 * StrToFloatDef(Edit2.Text,0));// aquí quiero sumarle 70
end;
end;

end;

end.

kapcomx
20-03-2014, 00:27:52
te da ese error por que lo estas programando en el evento form create

radenf
20-03-2014, 12:30:42
Hola Olenkaguilar:

Para corregir tu problema te sugiero que en vez de utilizar un Edit como Edit1 uses un SpinEdit de la paleta samples ( si quieres lo puedes llamar Edit1 y así no necesitas modificar tu código) y le asignes como minvalue 1 y como maxvalue 32, que son tus opciones y que asignes tu código además al evento OnChange del SpinEdit.
Para sumar 70 sólo debes incluir +70 en el valor del Edit2, de la siguiente manera:

Edit3.Text := FloatToStr(0.35 * StrToFloatDef(Edit2.Text,0)+70);

Ojalá te haya podido ayudar

Salu2

ecfisa
20-03-2014, 23:17:53
Hola Olenkaguilar.

Lo que te sugiere radenf es muy buena opción, sobre todo por que te ahorras controlar los valores de un edit.

Y para organizár y reducir el código podes hacer:

//(*)
procedure TForm1.FormCreate(Sender: TObject);
begin
with SpinEdit1 do
begin
MinValue:= 1;
MaxValue:= 32;
Increment:= 1;
OnChange:= SpinAndEditChange;
end;
Edit2.Text:= '1'; // o cero...
Edit2.OnChange:= SpinAndEditChange;
end;

procedure TForm1.SpinAndEditChange(Sender: TObject);
const
VEC: array[1..32] of Single =
(0.2 , 0.35, 0.5 , 0.6 , 0.68, 0.7 , 0.7 , 0.7 ,
0.68, 0.6 , 0.5 , 0.35, 0.25, 0.15, 0.05, 0.15,
0.2 , 0.25, 0.5 , 0.55, 0.6 , 0.6 , 0.6 , 0.65,
0.67, 0.6 , 0.5 , 0.45, 0.28, 0.18, 0.1 , 0.1);
begin
Edit3.Text:= FormatFloat('0.000', (VEC[SpinEdit1.Value]*StrToFloatDef(Edit2.Text, 0))+70);
end;


(*) Todo el código del evento OnCreate lo podes evitar configurando las propiedades en tiempo de diseño con el Object Inspector.

Saludos :)

Olenkaguilar
21-03-2014, 10:05:33
Muchas a radenf y a ecfisa, lo que me indico randenf está bien, pero yo cometí un error en dar mi code, es por eso que me perdí al ver el code de ecfisa. vuelvo a colocar mi código:

procedure TForm1.FormCreate(Sender: TObject);
begin
with SpinEdit1 do
begin
MinValue:= 1;
MaxValue:= 32;
Increment:= 1;
OnChange:= SpinAndEditChange;
end;

Edit2.OnChange:= SpinAndEditChange;
end;

procedure TForm1.SpinAndEditChange(Sender: TObject);
var //
opcion: integer;
begin //
opcion:= StrToInt(SpinEdit1.Text);

case opcion of
1: begin
Edit3.Text := FloatToStr(0.2 * StrToFloatDef(Edit2.Text,0)+70);
end;
2: begin
Edit3.Text := FloatToStr(0.35 * StrToFloatDef(Edit2.Text,0)+70);
end;
3: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0)+70);
end;
4: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0)+70);
end;
5: begin
Edit3.Text := FloatToStr(0.68 * StrToFloatDef(Edit2.Text,0)+70);
end;
6: begin
Edit3.Text := FloatToStr(0.7 * StrToFloatDef(Edit2.Text,0)+70);
end;
7: begin
Edit3.Text := FloatToStr(0.7 * StrToFloatDef(Edit2.Text,0)+70);
end;
8: begin
Edit3.Text := FloatToStr(0.7 * StrToFloatDef(Edit2.Text,0)+70);
end;
9: begin
Edit3.Text := FloatToStr(0.68 * StrToFloatDef(Edit2.Text,0)+70);
end;
10: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0)+70);
end;
11: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0)+70);
end;
12: begin
Edit3.Text := FloatToStr(0.35 * StrToFloatDef(Edit2.Text,0)+70);
end;
13: begin
Edit3.Text := FloatToStr(0.25 * StrToFloatDef(Edit2.Text,0)+70);
end;
14: begin
Edit3.Text := FloatToStr(0.15 * StrToFloatDef(Edit2.Text,0)+70);
end;
15: begin
Edit3.Text := FloatToStr(0.05 * StrToFloatDef(Edit2.Text,0)+70);
end;
16: begin
Edit3.Text := FloatToStr(70 - 0.15 * StrToFloatDef(Edit2.Text,0));
end;
17: begin
Edit3.Text := FloatToStr(70 - 0.2 * StrToFloatDef(Edit2.Text,0));
end;
18: begin
Edit3.Text := FloatToStr(70 - 0.25 * StrToFloatDef(Edit2.Text,0));
end;
19: begin
Edit3.Text := FloatToStr(70 - 0.5 * StrToFloatDef(Edit2.Text,0));
end;
20: begin
Edit3.Text := FloatToStr(70 - 0.55 * StrToFloatDef(Edit2.Text,0));
end;
21: begin
Edit3.Text := FloatToStr(70 - 0.6 * StrToFloatDef(Edit2.Text,0));
end;
22: begin
Edit3.Text := FloatToStr(70 - 0.6 * StrToFloatDef(Edit2.Text,0));
end;
23: begin
Edit3.Text := FloatToStr(70 - 0.6 * StrToFloatDef(Edit2.Text,0));
end;
24: begin
Edit3.Text := FloatToStr(70 - 0.65 * StrToFloatDef(Edit2.Text,0));
end;
25: begin
Edit3.Text := FloatToStr(70 - 0.67 * StrToFloatDef(Edit2.Text,0));
end;
26: begin
Edit3.Text := FloatToStr(70 - 0.6 * StrToFloatDef(Edit2.Text,0));
end;
27: begin
Edit3.Text := FloatToStr(70 - 0.5 * StrToFloatDef(Edit2.Text,0));
end;
28: begin
Edit3.Text := FloatToStr(70 - 0.45 * StrToFloatDef(Edit2.Text,0));
end;
29: begin
Edit3.Text := FloatToStr(70 - 0.28 * StrToFloatDef(Edit2.Text,0));
end;
30: begin
Edit3.Text := FloatToStr(70 - 0.18 * StrToFloatDef(Edit2.Text,0));
end;
31: begin
Edit3.Text := FloatToStr(70 - 0.1 * StrToFloatDef(Edit2.Text,0));
end;
32: begin
Edit3.Text := FloatToStr(0.1 * StrToFloatDef(Edit2.Text,0)+70);
end;


end; //

end;
end.


Osea en algunos les estoy agregando 70 y en otros al 70 le estoy restando( por ejemplo en la opción 31 le estoy restando al 70 y en la opción 32 le estoy agregando 70)
Ahora le eh puesto 2 radiobuttons. quisiera que al iniciar el programa siempre este seleccionado el radiobutton1 y que ejecute el código de arriba y si cambio al radiobutton2 ejecute este código( es lo mismo si no que cambia a lo que estado agregando 70, al 70 ahora le estan restando y viceversa):

procedure TForm1.FormCreate(Sender: TObject);
begin
with SpinEdit1 do
begin
MinValue:= 1;
MaxValue:= 32;
Increment:= 1;
OnChange:= SpinAndEditChange;
end;

Edit2.OnChange:= SpinAndEditChange;
end;

procedure TForm1.SpinAndEditChange(Sender: TObject);
var //
opcion: integer;
begin //
opcion:= StrToInt(SpinEdit1.Text);

case opcion of
1: begin
Edit3.Text := FloatToStr(70 - 0.2 * StrToFloatDef(Edit2.Text,0));
end;
2: begin
Edit3.Text := FloatToStr(70 - 0.35 * StrToFloatDef(Edit2.Text,0));
end;
3: begin
Edit3.Text := FloatToStr(70 - 0.5 * StrToFloatDef(Edit2.Text,0));
end;
4: begin
Edit3.Text := FloatToStr(70 - 0.6 * StrToFloatDef(Edit2.Text,0));
end;
5: begin
Edit3.Text := FloatToStr(70 - 0.68 * StrToFloatDef(Edit2.Text,0));
end;
6: begin
Edit3.Text := FloatToStr(70 - 0.7 * StrToFloatDef(Edit2.Text,0));
end;
7: begin
Edit3.Text := FloatToStr(70 - 0.7 * StrToFloatDef(Edit2.Text,0));
end;
8: begin
Edit3.Text := FloatToStr(70 - 0.7 * StrToFloatDef(Edit2.Text,0));
end;
9: begin
Edit3.Text := FloatToStr(70 - 0.68 * StrToFloatDef(Edit2.Text,0));
end;
10: begin
Edit3.Text := FloatToStr(70 - 0.6 * StrToFloatDef(Edit2.Text,0));
end;
11: begin
Edit3.Text := FloatToStr(70 - 0.5 * StrToFloatDef(Edit2.Text,0));
end;
12: begin
Edit3.Text := FloatToStr(70 - 0.35 * StrToFloatDef(Edit2.Text,0));
end;
13: begin
Edit3.Text := FloatToStr(70 - 0.25 * StrToFloatDef(Edit2.Text,0));
end;
14: begin
Edit3.Text := FloatToStr(70 - 0.15 * StrToFloatDef(Edit2.Text,0));
end;
15: begin
Edit3.Text := FloatToStr(70 - 0.05 * StrToFloatDef(Edit2.Text,0));
end;
16: begin
Edit3.Text := FloatToStr(0.15 * StrToFloatDef(Edit2.Text,0) + 70);
end;
17: begin
Edit3.Text := FloatToStr(0.2 * StrToFloatDef(Edit2.Text,0) + 70);
end;
18: begin
Edit3.Text := FloatToStr(0.25 * StrToFloatDef(Edit2.Text,0) + 70);
end;
19: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0) + 70);
end;
20: begin
Edit3.Text := FloatToStr(0.55 * StrToFloatDef(Edit2.Text,0) + 70);
end;
21: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0) + 70);
end;
22: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0) + 70);
end;
23: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0) + 70);
end;
24: begin
Edit3.Text := FloatToStr( 0.65 * StrToFloatDef(Edit2.Text,0) + 70);
end;
25: begin
Edit3.Text := FloatToStr(0.67 * StrToFloatDef(Edit2.Text,0) + 70);
end;
26: begin
Edit3.Text := FloatToStr(0.6 * StrToFloatDef(Edit2.Text,0) + 70);
end;
27: begin
Edit3.Text := FloatToStr(0.5 * StrToFloatDef(Edit2.Text,0) + 70);
end;
28: begin
Edit3.Text := FloatToStr(0.45 * StrToFloatDef(Edit2.Text,0) + 70);
end;
29: begin
Edit3.Text := FloatToStr(0.28 * StrToFloatDef(Edit2.Text,0) + 70);
end;
30: begin
Edit3.Text := FloatToStr(0.18 * StrToFloatDef(Edit2.Text,0) + 70);
end;
31: begin
Edit3.Text := FloatToStr(0.1 * StrToFloatDef(Edit2.Text,0) + 70);
end;
32: begin
Edit3.Text := FloatToStr(70 - 0.1 * StrToFloatDef(Edit2.Text,0));
end;


end; //

end;
end.

Olenkaguilar
21-03-2014, 10:30:16
En un SpinEdit no puedo agregar manualmente los números, me sale error al parecer no puede estar vacío

radenf
21-03-2014, 12:23:43
En efecto, en el SpinEdit no puedes agregar números, solo puedes definir los valores mínimo, máximo y actual. Si su valor fuera nulo te volvería a aparecer el error inicial, por eso te sugerí utilizar un SpinEdit y no un Edit.
Respecto a que el RadioButton1 se encuentre activado al iniciar el programa basta con agregar lo siguiente:

procedure TForm1.FormCreate(Sender: TObject);
begin
RadioButton1.Checked:= True;
if RadioButton1.Checked = True then
begin
Tu Proceso;
end;
end;

Salu2

radenf
21-03-2014, 13:34:15
Revisando el código que has puesto veo que estás asignando valores diferentes a dos instancias del mismo proceso TForm1.SpinAndEditChange, cosa que no se puede.
Te sugiero hacer lo siguiente, de acuerdo a lo que tú señalas:

- Colocar en tu Form 2 SpinEdit, en la misma posición y asignar los dos códigos diferentes, el que suma y el que resta, a cada uno de los SpinEdit.
- Colocar en tu Form 1 RadioGroup con 2 Items y asignarle el siguiente código:

procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.ItemIndex:= 0;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex=0 then
begin
SpinEdit1.BringtoFront
end
else
begin
SpinEdit2.BringtoFront;
end;
end;

Además para optimizar tu código te sugiero cambiar esto:

opcion:= StrToInt(SpinEdit1.Text);

por esto y te evitas una conversión:

opcion:= SpinEdit1.Value;

Espero haber entendido lo que quieres hacer y ojalá te sirva
Salu2