Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2010
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Unhappy Sumar y Dividir Combobox

Hola amigos, estoy realizando una aplicacion en donde tengo un formulario con una cantidad de Combobox (pongamos 16) cada combobox tiene dentro numeros del 1 al 4...

Yo necesito sumar todos esos combobox y que el resultado me lo muestre en un Tedit, realice esta linea de codigo:

Código Delphi [-]
procedure Tasisadmin.SpeedButton1Click(Sender: TObject);
begin
nfinal.Text := IntToStr( StrToInt(ComboBox1.Text)+
StrToInt(ComboBox2.Text) + StrToInt(ComboBox3.Text)+
StrToInt(ComboBox4.Text)+ StrToInt(ComboBox5.Text)+
StrToInt(ComboBox6.Text)+ StrToInt(ComboBox7.Text)+
StrToInt(ComboBox8.Text)+ StrToInt(ComboBox9.Text)+
StrToInt(ComboBox10.Text)+ StrToInt(ComboBox11.Text)+
StrToInt(ComboBox12.Text)+ StrToInt(ComboBox13.Text)+
StrToInt(ComboBox14.Text)+ StrToInt(ComboBox15.Text)+
StrToInt(ComboBox16.Text));
end;

luego de eso, necesito que me divida el resultado de dicha suma entre el numero de combobox totales, es decir, si el resultado me da 46 eso lo divido entre el numero de combobox y obtengo el resultado...

P.D.: existe alguna forma de que no sea tan larga la linea de codigo al sumar los combobox?

Espero poder obtener ayuda...gracias!

Vale decir que soy novato en esto del delphi!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #2  
Antiguo 01-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Probá de este modo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i, r: Integer;
begin
  r:= 0;
  for i:= 0 to ComponentCount-1 do
   if Components[i] is TComboBox then
      r:= r + StrToInt(TComboBox(Components[i]).Text);
  nfinal.Text:= IntToSTr(r);
end;

Saludos.
Responder Con Cita
  #3  
Antiguo 02-12-2010
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Ampliando la solución que te ha dado ecfisa:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i, r, c: Integer;
begin
  r := 0;
  c¨:= 0;
  for i := 0 to ComponentCount-1 do
  begin
   if Components[i] is TComboBox 
   then begin
      r := r + StrToInt(TComboBox(Components[i]).Text);
      c := c + 1;
   end;
  end; 
  nfinal.Text := FormatFloat('#,##0.##', r/c);
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #4  
Antiguo 06-12-2010
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Muchisimas gracias, me ha servido de mucho su ayuda...!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #5  
Antiguo 08-12-2010
calcena calcena is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 19
Poder: 0
calcena Va por buen camino
division de una celda tstringrid

Buenas porque narices cuando hago una division entre en contenido de una celda entre un numero de sale error que hago mal?

var horas : integer ;
var minutos : integer;
var tiempo :Integer;
const min_hora = 60;


// calculo de horas y minutos
tiempo:= strtoint(rejilla.Cells[7,arow]);
horas:= tiempo/min_hora;

tipo de error:
[DCC Error] Unit4.pas(171): E2010 Incompatible types: 'Integer' and 'Extended'

gracias a todos
Responder Con Cita
  #6  
Antiguo 08-12-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola calcena, el mensaje de error lo dice todo: Se está intentando dividir un número en forma real (es decir con decimales) y almacenar su resultado en una variable entera (números sin decimales).

La solución:
1. Declaras a la variable de tipo real o double. O bien,
2. Realizas una división entera mediante el operador DIV, como por ejemplo:
Código Delphi [-]
nro2 = nro1 DIV 123;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 16-12-2010
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Question

Amigos use esta formula y me funciona a la perfeccion colocandola en un BOTON con evento click...pero ahora, quiero que al yo ir seleccionando los combobox me sume automaticamente en el TEDIT(que es donde se muestra el resultado de la suma de los combobox) sin necesidad de tener un boton extra para sumar...me explico?

espero puedan ayudarme!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #8  
Antiguo 16-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ZiriusB.

Se me ocurre que podrías usar el evento OnExit de cada ComboBox. (aunque también podría ser OnChange...)

Algo como :
Código Delphi [-]
procedure TForm1.ComboBoxExit(Sender: TObject);
var
  i, r, c: Integer;
begin
  r := 0;
  c:= 0;
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TComboBox) and (TComboBox(Components[i]).Text > '') then
    begin
       r := r + StrToInt(TComboBox(Components[i]).Text);
       c := c + 1;
    end;
  end;
  Edit1.Text := FormatFloat('#,##0.##', r/c);
end;

Tendrías que asignar el procedimiento ComboBoxExit a cada ComboBox de tu form.

Saludos.

Última edición por ecfisa fecha: 16-12-2010 a las 20:39:12.
Responder Con Cita
  #9  
Antiguo 16-12-2010
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Cool

Cita:
Empezado por ecfisa Ver Mensaje
Hola ZiriusB.

Se me ocurre que podrías usar el evento OnExit de cada ComboBox. (aunque también podría ser OnChange...)

Tendrías que asignar el procedimiento ComboBoxExit a cada ComboBox de tu form.

Saludos.
Bueno lo que sucede es que son muchos formularios y cada formulario tiene muchas labels, de 15 a 18...

probe con un combo y me lanza el resultado de ese solo, lo probare completo a ver! gracias!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #10  
Antiguo 16-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por ZiriusB Ver Mensaje
Bueno lo que sucede es que son muchos formularios y cada formulario tiene muchas labels, de 15 a 18...

probe con un combo y me lanza el resultado de ese solo, lo probare completo a ver! gracias!
Bueno, podés reducir la tarea aprovechando la propiedad ComponentCount nuevamente:

Código Delphi [-]
...
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    ....
    Edit1: TEdit;
    procedure FormShow(Sender: TObject);
  private
    procedure ComboBoxChange(Sender: TObject);
  public
  end;
...
implementation
...
procedure TForm1.ComboBoxChange(Sender: TObject);
var
  i, r, c: Integer;
begin
  r := 0;
  c:= 0;
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TComboBox) and (TComboBox(Components[i]).Text > '') then
    begin
       r := r + StrToInt(TComboBox(Components[i]).Text);
       c := c + 1;
    end;
  end;
  Edit1.Text := FormatFloat('#,##0.##', r/c);
end;

{ Asignar ComboBoxChange al evento OnChange de todos los combos de Form1 }
procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to ComponentCount -1 do
    if Components[i] is TComboBox then
      TComboBox(Components[i]).OnChange:= ComboBoxChange;
end;

Saludos.
Responder Con Cita
  #11  
Antiguo 14-02-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Unhappy

Amigos, quisiera intentar esta misma formula pero con otro componente, con un RADIOGROUP, he intentado cambiarla pero me salta un error, podrian darme una mano con esto...

Código Delphi [-]
  r := 0;
  c:= 0;
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TAdvOfficeRadioGroup) and (TAdvOfficeRadioGroup(Components[i]).Items > '') then
    begin
       r := r + StrToInt(TAdvOfficeRadioGroup(Components[i]).Items);
       c := c + 1;
    end;
  end;
  nfinal.Text := FormatFloat('#,##0.##', r/c);

las variables estan declaradas, todo igual... pero me salta un error!

Agradezco su ayuda!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #12  
Antiguo 14-02-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Perdon no es
Código Delphi [-]
TAdvOfficeRadioGroup(Components[i]).Items

es
Código Delphi [-]
TAdvOfficeRadioGroup(Components[i]).Itemindex
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #13  
Antiguo 14-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ZiriusB.

Código Delphi [-]
var
  c, i, j: Integer;
  r: Double;
begin
  r:= 0;
  c:= 0;
  for i:= 0 to ComponentCount -1 do
   if (Components[i] is TRadioGroup) and
      (TRadioGroup(Components[i]).ItemIndex > -1) then
   begin
     r:= r + StrToFloat(TRadioGroup(Components[i]).Items[TRadioGroup(Components[i]).ItemIndex]);
     Inc(c);
   end;
  if c > 0 then
    ShowMessage(FormatFloat('#,##0.##', r/c));

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Genero comboBox en dbgrid y cuando hago dos veces click desaparece el comboBox. mcalmanovici Varios 1 29-02-2012 15:09:15
Problema al dividir 1 Drake JAVA 2 27-10-2010 19:05:07
como mostrar la ventana de lenar inten de un combobox en tiempo de un combobox gulder Varios 3 19-05-2007 19:55:58
Dividir un reporte fedelphi Impresión 2 02-04-2006 19:37:12
dividir una celda en 3... eli.vidal Impresión 5 18-11-2005 14:02:27


La franja horaria es GMT +2. Ahora son las 18:40:32.


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
Copyright 1996-2007 Club Delphi