Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   compactar codigo combobox (https://www.clubdelphi.com/foros/showthread.php?t=95008)

AlejandroCalica 30-12-2020 11:01:42

compactar codigo combobox
 
felices fiestas y les traigo otro problema que me surgio con un combobox.
combobox con varios items con un texto especifico, con el cual no hago ninguna operacion, peso si con el item seleccionado
ejemplo

item 1 valor 10%
item 2 valor 8%
item 3 valor 6%
y asi N item ok

bueno dependiendo del tem seleccionado, realisare una operacion con una variable integer pero tengo este codigo extenso y m duda es si existe un metido donde no repta tanto la parte de operaciones, estaba pensando como en un array dependiente del item seleccionado o algo asi

aqui esta el codigo

variables que ocupo
Código Delphi [-]
var
  Form1: TForm1;
  //Pes:Double;
  CB1:integer;
  Oper,Gra: Currency;
  Hc,Cm,Ov,Fv,Sn:Currency;

esto es ya en si el codigo que ejecuta las operaciones y donde siento que estoy repitiendo una cantdad considerable de codigo que podria compactar, por fabor diganme que puedo hacer les agradesco.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
CB1:=combobox1.ItemIndex+1;

case CB1 of
1: begin //Cachorro de 2  meses

   Gra:=StrToFloatDef(Edit1.Text,0) * 10 /100;
   Label5.Text:=FloattoStr(Gra);
   //60,20,10,5,5
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;


end;
2: begin //Cachorro de 3 a 4 meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 8 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;
3:begin//Cachorro de 5 a 6 meses
  Gra:=StrToFloatDef(Edit1.Text,0) * 6 /100;
  Label5.Text:=FloattoStr(Gra);
  Hc:=(Gra * 60 )/100;
  Cm:=(Gra * 20) /100;
  Ov:=(Gra * 10) /100;
  Fv:=(Gra * 5) /100;
  Sn:=(Gra * 5) /100;
  Label9.Text:=FloattoStr(Hc)  ;
  Label10.Text:=FloattoStr(Cm)  ;
  Label11.Text:=FloattoStr(Ov)  ;
  Label12.Text:=FloattoStr(Fv)  ;
  Label13.Text:=FloattoStr(Sn)  ;
end;

4: begin //Cachorro de 7 a 8 año
   Gra:=StrToFloatDef(Edit1.Text,0) * 4 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;
5: begin //Cachorro de 9 a 10 año
   Gra:=StrToFloatDef(Edit1.Text,0) * 3 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;
6: begin //Cachorro de 11 a 12 año
   Gra:=StrToFloatDef(Edit1.Text,0) * 2 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;

7: begin //Adulto Actividad Alta
   Gra:=StrToFloatDef(Edit1.Text,0) * 4 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;
8: begin //Adulto Actividad Media
   Gra:=StrToFloatDef(Edit1.Text,0) * 3 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;
9: begin //Adulto Cedentario
   Gra:=StrToFloatDef(Edit1.Text,0) * 2.5 /100;
   Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;
end;
10: begin //Esterilizada o Castrado
    Gra:=StrToFloatDef(Edit1.Text,0) * 2.5 /100;
    Label5.Text:=FloattoStr(Gra);
    Hc:=(Gra * 60 )/100;
    Cm:=(Gra * 20) /100;
    Ov:=(Gra * 10) /100;
    Fv:=(Gra * 5) /100;
    Sn:=(Gra * 5) /100;
    Label9.Text:=FloattoStr(Hc)  ;
    Label10.Text:=FloattoStr(Cm)  ;
    Label11.Text:=FloattoStr(Ov)  ;
    Label12.Text:=FloattoStr(Fv)  ;
    Label13.Text:=FloattoStr(Sn)  ;
end;
11: begin //Perro mayor de 6 años
    Gra:=StrToFloatDef(Edit1.Text,0) * 2 /100;
    Label5.Text:=FloattoStr(Gra);
    Hc:=(Gra * 60 )/100;
    Cm:=(Gra * 20) /100;
    Ov:=(Gra * 10) /100;
    Fv:=(Gra * 5) /100;
    Sn:=(Gra * 5) /100;
    Label9.Text:=FloattoStr(Hc)  ;
    Label10.Text:=FloattoStr(Cm)  ;
    Label11.Text:=FloattoStr(Ov)  ;
    Label12.Text:=FloattoStr(Fv)  ;
    Label13.Text:=FloattoStr(Sn)  ;
end;

end;
end;

esto es lo que repito y no cambia en nada solo el valor que toma la variable Gra

Código Delphi [-]
 Label5.Text:=FloattoStr(Gra);
   Hc:=(Gra * 60 )/100;
   Cm:=(Gra * 20) /100;
   Ov:=(Gra * 10) /100;
   Fv:=(Gra * 5) /100;
   Sn:=(Gra * 5) /100;
   Label9.Text:=FloattoStr(Hc)  ;
   Label10.Text:=FloattoStr(Cm)  ;
   Label11.Text:=FloattoStr(Ov)  ;
   Label12.Text:=FloattoStr(Fv)  ;
   Label13.Text:=FloattoStr(Sn)  ;

kuan-yiu 30-12-2020 11:12:47

Deja dentro del 'case' las instrucciones específicas para cada caso y a continuación el resto, fuera del 'case'. Así operará con las variables ya modificadas.

kuan-yiu 30-12-2020 11:17:29

Código Delphi [-]
case CB1 of
1: //Cachorro de 2  meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 10 /100;

2: //Cachorro de 3 a 4 meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 8 /100;

// y todas las demás opciones
else
   Gra:=1; // Para cubrir todos los casos
end;

Label5.Text:=FloattoStr(Gra);
Hc:=(Gra * 60 )/100;
Cm:=(Gra * 20) /100;
Ov:=(Gra * 10) /100;
Fv:=(Gra * 5) /100;
Sn:=(Gra * 5) /100;
Label9.Text:=FloattoStr(Hc)  ;
Label10.Text:=FloattoStr(Cm)  ;
Label11.Text:=FloattoStr(Ov)  ;
Label12.Text:=FloattoStr(Fv)  ;
Label13.Text:=FloattoStr(Sn)  ;

AlejandroCalica 30-12-2020 11:46:15

perfectooooooo....
 
Cita:

Empezado por kuan-yiu (Mensaje 539581)
Código Delphi [-]
case CB1 of
1: //Cachorro de 2  meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 10 /100;

2: //Cachorro de 3 a 4 meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 8 /100;

// y todas las demás opciones
else
   Gra:=1; // Para cubrir todos los casos
end;

Label5.Text:=FloattoStr(Gra);
Hc:=(Gra * 60 )/100;
Cm:=(Gra * 20) /100;
Ov:=(Gra * 10) /100;
Fv:=(Gra * 5) /100;
Sn:=(Gra * 5) /100;
Label9.Text:=FloattoStr(Hc)  ;
Label10.Text:=FloattoStr(Cm)  ;
Label11.Text:=FloattoStr(Ov)  ;
Label12.Text:=FloattoStr(Fv)  ;
Label13.Text:=FloattoStr(Sn)  ;


asi quedo al final

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
CB1:=combobox1.ItemIndex+1;
case CB1 of
1: begin //Cachorro de 2  meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 10 /100;
end;
2: begin //Cachorro de 3 a 4 meses
   Gra:=StrToFloatDef(Edit1.Text,0) * 8 /100;
end;
3:begin//Cachorro de 5 a 6 meses
  Gra:=StrToFloatDef(Edit1.Text,0) * 6 /100;
end;
4: begin //Cachorro de 7 a 8 año
   Gra:=StrToFloatDef(Edit1.Text,0) * 4 /100;
end;
5: begin //Cachorro de 9 a 10 año
   Gra:=StrToFloatDef(Edit1.Text,0) * 3 /100;
end;
6: begin //Cachorro de 11 a 12 año
   Gra:=StrToFloatDef(Edit1.Text,0) * 2 /100;
end;
7: begin //Adulto Actividad Alta
   Gra:=StrToFloatDef(Edit1.Text,0) * 4 /100;
end;
8: begin //Adulto Actividad Media
   Gra:=StrToFloatDef(Edit1.Text,0) * 3 /100;
end;
9: begin //Adulto Cedentario
   Gra:=StrToFloatDef(Edit1.Text,0) * 2.5 /100;
end;
10: begin //Esterilizada o Castrado
    Gra:=StrToFloatDef(Edit1.Text,0) * 2.5 /100;
end;
11: begin //Perro mayor de 6 años
    Gra:=StrToFloatDef(Edit1.Text,0) * 2 /100;
end else
   Gra:=1;
end;
Label5.Text:=FloattoStr(Gra);
Hc:=(Gra * 60 )/100;
Cm:=(Gra * 20) /100;
Ov:=(Gra * 10) /100;
Fv:=(Gra * 5) /100;
Sn:=(Gra * 5) /100;
Label9.Text:=FloattoStr(Hc)  ;
Label10.Text:=FloattoStr(Cm)  ;
Label11.Text:=FloattoStr(Ov)  ;
Label12.Text:=FloattoStr(Fv)  ;
Label13.Text:=FloattoStr(Sn)  ;
end;

se podra hacer mas compacto??????

kuan-yiu 30-12-2020 11:58:23

Si solo hay una línea dentro del 'case' sobran el 'begin end' (igual que le pasa al 'else'), como te puse yo en el código.
Existen otros componentes que te pueden devolver un valor asociado a cada item. Busca a ver si puedes usar alguno de ellos.
Puedes crear una TStringList con pares de valores: por un lado el número de item y por el otro el valor del cálculo pero implica código de creación. Reduces aquí pero sumas en otra parte.

AlejandroCalica 30-12-2020 12:07:12

me dejaste igual o con mas dudas jajajajajaja, es que imagine qque podria no se usar los item dentro de un array y asi acortar lineas de codigo las opciones de en listar los items del combobox o algo asi kuan-yiu

y ya abusando de tu conocimiento, como se puede cambiar el icono y la pantalla principal de fondo negro con esa flamita roja que aparece en las aplicacones terminadas en las Apks??

AlejandroCalica 30-12-2020 12:08:55

estoy usando Delphi 10.3.3

kuan-yiu 30-12-2020 12:09:58

No tengo Delphi 10, pero supongo que estará donde siempre:
Porject | Options | Application
Ahí puedes cambiar el logo por un .ico con todos los tamaños que necesites.

La pantalla principal la defines tú, es un formulario y tiene propiedades como el color o las dimensiones, la posición en que aparece, si se puede minimizar...

kuan-yiu 30-12-2020 12:17:36

También puedes consultar este hilo a ver si te ayuda o alguno de los que está abajo:
http://www.clubdelphi.com/~marcsc/fo...ad.php?t=28534


La franja horaria es GMT +2. Ahora son las 03:45:50.

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