Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   eliminar elementos de lista y restar valores (https://www.clubdelphi.com/foros/showthread.php?t=87098)

danielmj 13-11-2014 23:17:14

eliminar elementos de lista y restar valores
 
Hola... de nuevo :o

Tengo un problema con la lista, exactamente a la hora de borrar. Este es el código:

Código Delphi [-]
procedure TrForm.Eliminarseleccionado1Click(Sender: TObject);
var
  i: integer;
  list: TListItem;
  valor1: real;

begin
  for i:= 0 to lista.Items.Count -1 do
    if lista.Items.Item[i].Selected then
      begin
        list:= Lista.Items.Item[i];
        valor1:= StrToFloat(list.SubItems[Lista.Columns.Count-3]);
        label35.Caption:= FloatToStr(StrToFloat(label35.Caption)-valor1);
        lista.Items.Item[i].Delete;
        plista.Items.Item[i].Delete;
      end;
end;

* Borrar, borra los elementos seleccionados sin problemas
* A medida que borra, va restando del total a pagar.... pero:

Aquí se aplica eso del metodo LIFO en toda su extensión, y lo digo por que para que no falle, el primero en borrar tiene que ser el ultimo en entrar. Siempre y cuando seleccione desde el ultimo en entrar, todo va bien, ahora si tengo por ejemplo 5 articulos y empiezo a borrar por el primero o cualquiera que no sea el ultimo, da error "access vioation".

Lo he mirado y remirado y no lo veo, se me escapa o no se encontrar el error, siento tener que ser tan pesado pero si no os pido ayuda no avanzo.
Lo que si me gustaría, si no es mucho pedir, es que me indicarais con comentarios junto al codigo donde y por que falla.

Lo dicho, perdonad si estoy pesado.
Gracias y un saludo.

nlsgarcia 13-11-2014 23:44:40

danielmj,

Cita:

Empezado por danielmj
...eliminar elementos de lista...cuando seleccione desde el ultimo en entrar, todo va bien, ahora si tengo por ejemplo 5 artículos y empiezo a borrar por el primero o cualquiera que no sea el ultimo, da error "Access Violation"...

:rolleyes:

Revisa este código:
Código Delphi [-]
 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;
 
 type
   TForm1 = class(TForm)
     ListBox1: TListBox;
     Button1: TButton;
     procedure FormCreate(Sender: TObject);
     procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.FormCreate(Sender: TObject);
 var
    i : Integer;
 begin
 
    ListBox1.MultiSelect := True;
 
    for i := 0 to 10 do
       ListBox1.Items.Add('Item-' + IntToStr(i));
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
    i : Integer;
 begin
    for i := ListBox1.Count - 1 downto 0 do
      if ListBox1.Selected[i] then
         ListBox1.Items.Delete(i);
 end;
 
 end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, ilustra como eliminar elementos de un TListBox en cualquier orden.

Espero sea útil :)

Nelson.

danielmj 13-11-2014 23:59:25

Cita:

Espero sea útil :)
Pues si, lo ha sido nelson, gracias. Viendo tu codigo me di cuenta de donde estaba mi error, en el for. Yo lo escribía asi:

Código Delphi [-]
...
For i:= 1 - lista.items.count downto 0 do
...

Así que error mio :) gracias otra vez.


La franja horaria es GMT +2. Ahora son las 11:02:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi