Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-07-2017
rafaelon rafaelon is offline
Miembro
 
Registrado: sep 2010
Posts: 29
Poder: 0
rafaelon Va por buen camino
seleccionados de un checkboxlist y sumar en un label

hola , tengo la siguiente duda tengo varios elementos en un checkboxlist los cuales se alimentan de una tabla "trabajos" tiene 3 campos "ID_trabajos", "Descripción" y "precio" , el problema es que en el checkboxlist solo tengo que muestre la descripción y lo que quisiera es que lo que seleccione en el checkboxlist segun el precio que tiene en la tabla se sume y se muestre en un label, gracias
Responder Con Cita
  #2  
Antiguo 03-07-2017
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.

Este es un modo en que podes hacer lo que buscas:
Código Delphi [-]
...
implementation

uses contnrs; // TObjectList

type
  TFldClass = class
    Id  : Integer;   // ( por si lo necesitas + adelante )
    Desc: string;
    Prec: Double;
  end;

var
  lst: TObjectList;

// Carga Id, descripcion y precio en lista
procedure TForm1.FormCreate(Sender: TObject);
var
  FC  : TFldClass;
begin
  lst := TObjectList.Create;

  CheckListBox1.Clear;
  Query.Close;
  Query.SQL.Text := 'SELECT ID_TRABAJOS, DESCRIPCION, PRECIO FROM TRABAJOS';
  Query.Open;

  while not Query.Eof do
  begin
    FC := TFldClass.Create;
    FC.Id   := Query.FieldByName( 'ID_TRABAJOS' ).AsInteger;
    FC.Desc := Query.FieldByName( 'DESCRIPCION' ).AsString;
    FC.Prec := Query.FieldByName( 'PRECIO' ).AsFloat;
    lst.Add( FC );
    CheckListBox1.Items.AddObject( Query.FieldByName( 'DESCRIPCION' ).AsString, FC );
    Query.Next;
  end;
end;

// Muestra suma de precios de items seleccionados
procedure TForm1.btnShowSumClick(Sender: TObject);
var
  i   : Integer;
  tot  : Double;
begin
  tot  := 0;
  for i := 0 to CheckListBox1.Items.Count - 1 do
    if CheckListBox1.Checked[i] then
      tot := tot + TFldClass( lst[i] ).Prec;
  LabelTotal.Caption := FloatToStr( tot );  // Suma en LabelTotal
end;

// Liberar lista
procedure TForm1.FormDestroy(Sender: TObject);
begin
  lst.Free;
end;

Y, si no te importa liberar la lista manualmente (ya que TStrings no lo hará de forma automática), podes prescindir del uso de TObjectList:
Código Delphi [-]
...
implementation

type
  TFldClass = class
    Id  : Integer;   // ( por si lo necesitas + adelante )
    Desc: string;
    Prec: Double;
  end;

// Carga Id, descripcion y precio en lista
procedure TForm1.FormCreate(Sender: TObject);
var
  FC  : TFldClass;
begin

  CheckListBox1.Clear;
  Query.Close;
  Query.SQL.Text := 'SELECT ID_TRABAJOS, DESCRIPCION, PRECIO FROM TRABAJOS';
  Query.Open;

  while not Query.Eof do
  begin
    FC := TFldClass.Create;
    FC.Id   := Query.FieldByName( 'ID_TRABAJOS' ).AsInteger;
    FC.Desc := Query.FieldByName( 'DESCRIPCION' ).AsString;
    FC.Prec := Query.FieldByName( 'PRECIO' ).AsFloat;
    CheckListBox1.Items.AddObject( Query.FieldByName( 'DESCRIPCION' ).AsString, FC );
    Query.Next;
  end;
end;

// Muestra suma de precios de items seleccionados
procedure TForm1.btnShowSumClick(Sender: TObject);
var
  i   : Integer;
  tot  : Double;
begin
  tot  := 0;
  for i := 0 to CheckListBox1.Items.Count - 1 do
    if CheckListBox1.Checked[i] then
      tot := tot + TFldClass( CheckListBox1.Items.Objects[i] ).Prec;
  LabelTotal.Caption := FloatToStr( tot );  // Suma en LabelTotal
end;

// Liberar lista
procedure TForm1.FormDestroy(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to CheckListBox1.Items.Count - 1 do
    CheckListBox1.Items.Objects[i].Free;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-07-2017 a las 23:40:11. Razón: agregar opción
Responder Con Cita
  #3  
Antiguo 03-07-2017
rafaelon rafaelon is offline
Miembro
 
Registrado: sep 2010
Posts: 29
Poder: 0
rafaelon Va por buen camino
gracias por la respuesta ,me da error al declarar TFldClass = class
Responder Con Cita
  #4  
Antiguo 03-07-2017
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

No tendría por que dar error, pero no sé si será requisito en las nuevas versiones de Delphi... a ver, intenta declarando la clase así:
Código Delphi [-]
type
  TFldClass = class( TObject )
    Id  : Integer;   // ( por si lo necesitas + adelante )
    Desc: string;
    Prec: Double;
  end;
Estoy casi seguro que no es el problema, pero si aún así sigue dandote error, por favor copia y pega textualmente como lo estas implementando.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 03-07-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No, no es requisito declarar el ancestro cuando se define una nueva clase, en ese caso obvio que se asume un descendiente de TObject.
Responder Con Cita
  #6  
Antiguo 03-07-2017
rafaelon rafaelon is offline
Miembro
 
Registrado: sep 2010
Posts: 29
Poder: 0
rafaelon Va por buen camino
era mi error ya corre bien y funciona, solo que lo estaba declarando el class donde no correspondia , gracias de nuevo
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
Seleccionados de un checkboxlist a edit rafaelon Varios 2 02-07-2017 17:38:56
Obtener listado de checkboxlist frankmaniaz C++ Builder 1 25-09-2013 01:15:33
Agregar ID a checkboxlist en delphi teecweb Varios 12 08-03-2013 16:05:47
Sumar un el valor de un Label en report builder escorpionrojo43 Impresión 14 15-10-2012 23:50:44
Sumar Label Caral Varios 1 07-10-2006 01:10:51


La franja horaria es GMT +2. Ahora son las 19:24:42.


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