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 de markspiner
1
1
markspiner, Amplios conocimientos en la enseñanza y desarrollos a nivel...
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!