Ver Mensaje Individual
  #2  
Antiguo 03-07-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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