Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   cosas raras (https://www.clubdelphi.com/foros/showthread.php?t=19644)

ixMike 21-03-2005 16:15:18

cosas raras
 
Hola, forofos :)


Tengo un problemilla un tanto extraño:

En un programa necesito añadir en una lista (TListBox) los nombres de varios archivos. Uso un codigo para evitar que en la lista se añadan dos archivos con el mismo nombre, aunque esten en distintos directorios. Sencillamente uso ExtractFileName en todos los elementos de la lista y los de los archivos que he abierto con un TOpenDialog. El codigo es el siguiente:

Código Delphi [-]
 procedure TFComprimidos.BAnadirFicheroClick(Sender: TObject);
 var
 n, i, c: integer;
 lista: tstrings;
 begin
 if opend.execute and fileexists(OpenD.FileName)then
   begin
   lista:=tstringlist.create;
   lista:=openD.files;
   if LFicheros.Items.Count=0 then
     begin
     LFicheros.Items:=openD.Files;
     exit;
     end;
   n:=lficheros.items.count-1;
   i:=lista.Count-1;
    repeat
     repeat
     if UpperCase(ExtractFileName(LFicheros.Items[n]))=uppercase(ExtractfileName(lista[i]))then lista.Delete(i);
     i:=i-1;
     until i=-1;
     n:=n-1;
    until n=-1;
    if lista.Count>0 then
     for c:=0 to lista.count-1 do
      LFicheros.Items.Add(lista[c]);
    lista.free;
   end;
 end;

El problema es que cuando el la lista (LFicheros) ya hay algo metido, al volver a darle al boton me sale esta excepcion

"List index out of bounds (-1)"

Mi duda es por qué se produce este error, ya que ese "-1" se da en la variable "n" justo después de inicializarla con el valor "LFicheros.Items.Count-1"
Alguien puede ayudarme???

Gracias desde YA

Salu2 a todo el club

delphi.com.ar 21-03-2005 16:54:58

No me convence esto:
Código Delphi [-]
lista := tstringlist.create;
lista := openD.files;
...
lista.free;
Digamos.. Estas creando un objeto del tipo TStringList y se lo asignas a la variable "lista", en el siguiente instante sobreescribes el valor de la variable con una porpiedad del mismo tipo del TOpenDialog, y luego haces un free del objeto del open dialog!!!!!
Replantéalo, eso no esta bien!


La franja horaria es GMT +2. Ahora son las 19:05:18.

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