Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Resumir tabla (https://www.clubdelphi.com/foros/showthread.php?t=74682)

Chichero 04-07-2011 19:12:23

Resumir tabla
 
Saludos amigos, espero puedan ayudarme en ésto...tengo q realizar una aplicacion q sume el calor por equipos en un local. El caso es que pueden haber en el local maximo 13 equipos y tengo una tabla con 27 tipos de equipos, osea cada uno de esos maximo 13 equipos puede ser de 27 tipos..

y para cada combobox aplica esta tabla

al final saco un calor total por equipos y lo mando a un label (Qte= Qe1*ne1+Qe2*ne2+...Qe13*ne13)
El hecho es q no sé trabajar con las StringGrids ocultas y no modificables; entonces para casos de tablas he hecho por CASE (claro para tablas mas cortas). Ésta vez también lo puedo hacer pero me va a ocupar demasiadas lineas de programa porque colocaría para el equipo 1 case para las 27 posiciones de la combobox diferentes valores para Qe1, equipo 2 case para las 27 posiciones Qe2 y asi sucesivamente...
Sé que hay casos q tienen el mismo valor y colocaria ejemplo 2,9: begin Qe1:=300; (pero eso no me resume casi nada) :)
¿Alguien podría ayudarme a resumirlas lo u optimizar?
Agradecido de antemano a los moderadores o usuarios que me puedan ayudar...

Chichero 04-07-2011 19:17:12

http://img10.imageshack.us/img10/9462/equiposd.jpg
http://img155.imageshack.us/img155/7...adevalores.jpg

oscarac 04-07-2011 19:18:32

hola
puedes colocar algo del codigo?
como lo estas haciendo hasta el momento?:cool:

Chichero 04-07-2011 19:48:28

Código Delphi [-]
//Equipos
CASE Combobox1.ItemIndex OF
0,5: Begin
Qeq1:=500;
end;
1: Begin
Qeq1:=23;
end;
.
.
.
//y asi hasta llegar al ultimo caso
26: Begin
Qeq1:=1000;
end;

CASE Combobox2.ItemIndex OF
0,5: Begin
Qeq2:=500;
1: Begin
Qeq2:=23;
.
.
.
//y asi hasta llegar al ultimo caso
26: Begin
Qeq1:=1000;
end;
.
.
.
//Y asi hasta llegar al ultimo combobox (13)
CASE Combobox13.ItemIndex OF
0,5: Begin
Qeq13:=500;
1: Begin
Qeq13:=23;
.
.
.
//y asi hasta llegar al ultimo caso
26: Begin
Qeq13:=1000;
end;
Qte:= Qe1*ne1+Qe2*ne2+...+Qe3*ne3;
(supongase q todas las variables están declaradas)
nex: numero de equipos "X"
Ven que sería demasiado largo!!

ecfisa 04-07-2011 20:25:16

Hola Chichero.

Si no entiendo mal tenes 13 elementos que pueden ser 27 tipos diferentes de artículos eléctricos.
Los tipos de artículos me imagino corresponderan con su gasto en Watts, calorias, o lo que sea. Pero la cantidad deberá corresponderse con el tipo. Es decir todos los tipos 5 consumirán lo mismo por ejemplo.

Entonces creo que se puede simplificar así:
Código Delphi [-]
{ Cargar los diferentes artículos con su consumo }
procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.Items.AddObject('Cafetera',TObject(500));  // 500 watts
  ComboBox1.Items.AddObject('Heladera',TObject(1000)); // 1400 watts.
  ComboBox1.Items.AddObject('Notebook',TObject(450));
  ComboBox1.Items.AddObject('Fotocopiadora',TObject(1800));
  ComboBox1.Items.AddObject('Caloventor',TObject(1500));
  ComboBox1.Items.AddObject('Microoondas',TObject(1800));
  ComboBox1.Items.AddObject('Aire Acond.',TObject(2200));
  ... // 27 tipos
 
  ComboBox2.Items:= ComboBox1.Items;
  ComboBox3.Items:= ComboBox1.Items;
  ComboBox4.Items:= ComboBox1.Items; 
  ... 
  ComboBox13.Items:= comboBox1.Items;
 
end;

{ Mostrar la sumatoria de consumos de los equipos seleccionados }
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  Watts: Integer;
begin
  Watts:= 0;
  for i:= 0 to ComponentCount -1 do
    if Components[i].ClassType = TComboBox then
      with TComboBox(Components[i]) do
        if ItemIndex <> -1 then
          Watts:= Watts + Integer(Items.Objects[ItemIndex]);
  Label1.Caption:= IntToStr(Watts);
end;
...
En el ejemplo, la variable Watts almacena la sumatoria del consumo de los equipos seleccionados en los combos y muestra el total en la etiqueta Label1.

Saludos.

Chichero 04-07-2011 21:30:02

:eek: Hermano usted es un iluminado de verdad muchas gracias lo haré así! si sepudieran poner calificaciones positivas le pusiera 50!

Chichero 04-07-2011 21:47:16

Otra pregunta brother, sí son dos valores por cada item (osea un calor sensible y uno latente), sería TObject1]y TObject2?? y claro otro watts2

Chichero 04-07-2011 21:51:04

osea q watts1 sume el sensible y watts2 sume el latente

ecfisa 04-07-2011 22:41:31

Hola.

No, no es posible hacer:
Código Delphi [-]
ComboBox1.Items.AddObject('aaa', TObject(x), TObject(y));

En ese caso creo que deberías usar un arreglo de registros, algo como:
Código Delphi [-]
...
implementation
type
  TRegConsumo = record
    VSensible: Integer;
    VLatente: Integer;
  end;
var
  Consumo: array [0..26] of TRegConsumo;

procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.Items.Add('Cafetera');
  Consumo[0].VSensible:= 500;
  Consumo[0].VLatente:= 700;

  ComboBox1.Items.Add('Heladera');
  Consumo[1].VSensible:= 1000;
  Consumo[1].VLatente:= 1200;

  ComboBox1.Items.Add('Notebook');
  Consumo[2].VSensible:= 450;
  Consumo[2].VLatente:= 500;
  ComboBox2.Items:= ComboBox1.Items;
  //...
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  C1,C2: Integer;
begin
 C1:= 0;
  C2:= 0;
  for i:= 0 to ComponentCount -1 do
    if Components[i].ClassType = TComboBox then
      with TComboBox(Components[i]) do
        if ItemIndex <> -1 then
        begin
          C1:= C1 + Consumo[ItemIndex].VSensible;
          C2:= C2 + Consumo[ItemIndex].VLatente;
        end;
  Label1.Caption:= 'Sensible: '+IntToStr(C1)+#13+'Latente: '+IntToStr(C2);
end;
Donde aprovechas ItemIndex como índice del arreglo de registros, por supuesto deben corresponderse los índices.

Saludos.

Chichero 05-07-2011 05:26:08

Ok man muchas gracias no sabes cuántas lineas de prog me va a ahorrar eso! :D

Chichero 05-07-2011 19:50:53

Saludos brother también quiero aprovechar esa informacion para otro prog q calcula calor pero por paredes exteriores, interiores , techo, piso.. cada uno puede estar compuesto de max 4 materiales de diferentes tipos (ya esta parte lo sé.. la cosa por ejemplo es que de el peso y resistencia de Paredes exteriores (Ppe, Rpe), Interiores (Ppi, Rpi), techo (Pti, Rti) y piso (psi, rsi)...
osea quiero saber como hacer para q el contador de Ppe y el de Rpe sume desde la combobox1 hasta la 4, Ppi y Rpi sume desde la 5 hasta la 9 y asi.. porque despues los usare para las diferentes formulas de calor. Y al final varios labels que diran el calor por paredes, otra para techo y asi...
Código Delphi [-]
//paredes esteriores
ppe:= 0;
Rpe:= 0;
Ape:= StrToFloat(Edit1.Text)
  for i:= 0 to ComponentCount -1 do
    if Components[i].ClassType = TComboBox then
      with TComboBox(Components[i]) do
        if ItemIndex <> -1 then // (COMO HAGO PARA QUE SEA DE La combobox1 a la 4 ésto es lo que me interesa):)
        begin
          ppe:= ppe + Material[ItemIndex].VPeso;
          Rpe:= Rpe + Material[ItemIndex].VResist;
        end;
Qpe:= Ape*ppe*Dte


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi