Sumar campos en una tabla

Hola, tengo que realizar una menú de restaurante con precios de platos y que el usuario pueda hacerse un presupuesto marcando con el ratón (checkbox) lo que vaya a consumir. Se trata de realizar una tabla y que luego mediante un botón sume las opciones o checkboxes que el usuario ha marcado. ¿Cómo lo podría hacer?
Muchas gracias

1 Respuesta

Respuesta
1
Yo usaría un ListView (Win32) al que llamaremos lvMenu. Primero establece las siguientes propiedades:
- CheckBoxes := True;
- ViewStyle := vsReport;
Define los siguientes tipo de variable:
Type
PPrecio = ^Currency;
Define una Variable Global para el Total:
Var
Total : Currency;
Crea un TLabel para mostrar el total (Label1) y pones el caption en '0'.
Crea un procedimiento para actualizar el total en el Label1:
Procedure ActualizaTotal;
begin
Form1.label1.caption := FormatCurr(',0.00', Total);
end;
Agregale una columna al ListView con caption = 'Menú' y le pones un ancho suficiente (width) para los nombres de los platos.
En el evento lvMenu. OnDeletion escribe el siguiente código que libera el puntero de precio al ser eliminada la línea del ListView:
procedure TForm1.lvMenuDeletion(Sender: TObject; Item: TListItem);
begin
Dispose(Prec);
end;
Llevas el total inicialmente a cero (0) y suponiendo que el menú proviene de un Table1:TTable, agrega al ListView la información de los menús de la siguiente manera:
Procedure TForm1.ActualizaLista;
var
Prec : PPrecio;
Begin
Total := 0;
ActualizaTotal;
lvMenu.Items.BeginUpdate;
Try
lvMenu.Items.Clear;
Table1.First;
while not Table1.eof do
begin
with lvMenu.Items.Add do
begin
New(Prec);
caption := Table1.FieldByName('descrip').AsString;
Prec^ := Table1.FieldByName('precio').AsCurrency;
data := Prec;
end;
Table1.next;
end;
finally
lvMenu.Items.EndUpdate;
end;
End;
Finalmente en el evento lvMenu.OnChange escribe le siguiente código:
procedure TForm1.lvMenuChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
if Change = ctState then // se ha "checkado" o "descheckado"
begin
if Item.Checked then
Total := Total + PPrecio(Item.data)^
else
Total := Total - PPrecio(Item.data)^;
ActualizaTotal;
end;
end;
Si tienes algún problema avísame.
Marco.
Muchas gracias. Lo malo es que no soy programador y muchas de las cosas que me dices no sé cómo colocarlas exactamente para que funcione. Pero ya lo consultaré. Gracias de nuevo por haber dedicado tu tiempo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas