Fórum Problema com TList #402169
02/06/2011
0
Estou com um bug estranho usando uma TList. Estou fazendo um programa de frente de caixa. A parte que acontece esete bug é na hora de fazer o pedido. Há as opções adicionar e remover do carrinho. No adicionar, pego os dados do produto e adiciono numa lista TList do objeto Pedido que criei um objeto ItemPedido, e com isso atualizo subtotal... total... e a lista do carrinho. Até ai tudo bem. Mas quando vou retirar do carrinho e atualizar o valor do total, quando vou pegar da lista de itens, ele só me retorna o último que adicionei. Então se eu adicionar Bola e Carro, ele só vai me retornar Carro, mesmo que eu já tenha removido ele. Conferi a lista logo após que adiciono, e ele adiciona normalmente. Mas na hora de pegar na lista depois que removo o último da esse problema.
A seguir segue os trechos de código:
ADICIONA NO CARRINHO
procedure TOrcamentoForm.AdicionarButtonClick(Sender: TObject);
var
nitens: Integer;
subtotal: Double;
desconto, acrescimo: Double;
item: TItemPedido;
n: integer;
begin
desconto := 0; acrescimo := 0; subtotal := 0;
nitens := CarrinhoListBox.Count - 2;
CarrinhoListBox.Items.Add(IntToStr(nitens+1)+': '+produto.Nome+
' x'+QuantEdit.Text+' R$ '+FloatToStrF(produto.Valor, ffCurrency, 5, 2));
item := TItemPedido.Create;
item.produto := produto;
item.qtd := StrToInt(QuantEdit.Text);
pedido.itens.Add(TObject(item));
if DescEdit.Text '' then desconto := StrToFloat(DescEdit.Text);
if AcrescEdit.Text '' then acrescimo := StrToFloat(AcrescEdit.Text);
subtotal := item.produto.Valor * item.qtd;
subtotal := subtotal - (subtotal/100 * desconto);
pedido.Valor := pedido.Valor + subtotal;
TotalPanel.Caption := FloatToStrF(pedido.Valor, ffCurrency, 5, 2);
....
RETIRA DO CARRINHO
procedure TOrcamentoForm.RemoverButtonClick(Sender: TObject);
var
subtotal: Double;
item: TItemPedido;
n: integer;
begin
if CarrinhoListBox.Items.Count > 2 then
begin
subtotal := 0;
CarrinhoListBox.Items.Delete(CarrinhoListBox.Count - 1);
item := pedido.itens.Last;
subtotal := item.produto.Valor * item.qtd;
pedido.Valor := pedido.Valor - subtotal;
pedido.itens.Remove(pedido.itens.Last);
TotalPanel.Caption := FloatToStrF(pedido.Valor, ffCurrency, 5, 2);
CodigoEdit.SetFocus;
{TODO: Bug de retirar do carrinho }
end;
Fiz de tudo mas nada deu certo.
A seguir segue os trechos de código:
ADICIONA NO CARRINHO
procedure TOrcamentoForm.AdicionarButtonClick(Sender: TObject);
var
nitens: Integer;
subtotal: Double;
desconto, acrescimo: Double;
item: TItemPedido;
n: integer;
begin
desconto := 0; acrescimo := 0; subtotal := 0;
nitens := CarrinhoListBox.Count - 2;
CarrinhoListBox.Items.Add(IntToStr(nitens+1)+': '+produto.Nome+
' x'+QuantEdit.Text+' R$ '+FloatToStrF(produto.Valor, ffCurrency, 5, 2));
item := TItemPedido.Create;
item.produto := produto;
item.qtd := StrToInt(QuantEdit.Text);
pedido.itens.Add(TObject(item));
if DescEdit.Text '' then desconto := StrToFloat(DescEdit.Text);
if AcrescEdit.Text '' then acrescimo := StrToFloat(AcrescEdit.Text);
subtotal := item.produto.Valor * item.qtd;
subtotal := subtotal - (subtotal/100 * desconto);
pedido.Valor := pedido.Valor + subtotal;
TotalPanel.Caption := FloatToStrF(pedido.Valor, ffCurrency, 5, 2);
....
RETIRA DO CARRINHO
procedure TOrcamentoForm.RemoverButtonClick(Sender: TObject);
var
subtotal: Double;
item: TItemPedido;
n: integer;
begin
if CarrinhoListBox.Items.Count > 2 then
begin
subtotal := 0;
CarrinhoListBox.Items.Delete(CarrinhoListBox.Count - 1);
item := pedido.itens.Last;
subtotal := item.produto.Valor * item.qtd;
pedido.Valor := pedido.Valor - subtotal;
pedido.itens.Remove(pedido.itens.Last);
TotalPanel.Caption := FloatToStrF(pedido.Valor, ffCurrency, 5, 2);
CodigoEdit.SetFocus;
{TODO: Bug de retirar do carrinho }
end;
Fiz de tudo mas nada deu certo.
Jonathan Soares
Curtir tópico
+ 0
Responder
Posts
02/06/2011
Rafael Mattos
Não entendi muito bem, mas não se esqueça quando vc add ou remove, o ItemIndex dele muda
Responder
Gostei + 0
06/06/2011
Jonathan Soares
Consegui resolver, não tinha nada haver com a List, mas sim com referencia a objeto
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)