Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda sobre algunos asuntos en ListView (https://www.clubdelphi.com/foros/showthread.php?t=57620)

Black_Ocean 23-06-2008 03:44:57

Duda sobre algunos asuntos en ListView
 
Hola amigos de ClubDelphi,

Tengo un dilema referente a algunas acciones que quiero realizar en la ListView:

Lo que pasa es que necesito borrar todos los items de la ListView que tengan como texto "Listo", exceptuando el item que está mostrando información activa.

Como el procedimiento utiliza un for para esto, al borrar todos los items de la lista, excepto el item que aún no ha terminado de mostrar info activa, se borran todos, en eso estamos claros, pero el contador del for como no lo puedo actualizar porque aún está mostrando información genera un error de Index of bonus list.

Por ejemplo, los items estarían algo así y tendrían estos textos:

Listo
Listo
Procesando 1%
Listo
Listo

El item que aún dice "Procesando 1%" no será borrado hasta que termine ese proceso (es obvio no), pero el usuario necesita limpiar la lista de los items que dicen "Listo". Al borrar los últimos 2 items de la lista se hace correctamente, pero al borrar los primeros 2 items de la lista, el item que dice "Procesando 1%" perderá su index actual (ya que quedará en la posición 0 de la lista) entonces me arrojará un error porque el contador del for tendrá como valor 2. El problema es que no se como actualizar el contador del for en esta ocasión que está recorriendo la lista al borrar otros items que estan precediendo al item activo.

Espero que se entienda lo que plantee y cualquier ayuda es valorada.

Saludos y de antemano, gracias :D

Caro 23-06-2008 06:24:54

Hola Black_Ocean, no borres de principio a fin, sino empieza desde el final hasta el principio para que no te de el error.

Tu for quedaría asi:

Código Delphi [-]
  for i:=ListView1.Items.Count-1 downto 0 do
   begin
     .......
     .......
   end;

Saluditos

Black_Ocean 23-06-2008 07:01:18

Hola [caro],

Gracias por contestarme.

Eso lo tengo en conocimiento, tal vez yo no me expresé bien.

Lo que necesito es que cuando los items con texto "Listo" se borren, como el item "Procesando %d" quedará en la posición 0, el otro contador del for que estoy utilizando para recorrer la lista que espera a que un proceso termine para avanzar al siguiente item, se actualice la palabra "Procesando %d" ahora en el item que quedó, o sino, intentará mostrar el texto en un item que no corresponde al actual o a uno inexistente, ya que como en el ejemplo anterior, de la posición 2 que estaba cambia a la posición 0.

EL item que dice "Procesando %d" estará calculando el porcentaje de conversión de un archivo, pero mientras dure este proceso, el usuario podrá limpiar la lista de los que hayan finalizado. Entonces como el item ya no estará en la posición de denante, el contador del for me dará un error porque estará con valor 2

Ejemplo:

Antes del borrado:
for i := 0 to ListView.items.count -1 do
ListView1.Items[i].caption := 'Procesando 1%':

Al Borrar necesito cambiar el indice de ese for a la posición donde quedó después del borrado para que me siga mostrando el porcentaje activo en el item que corresponde.



Ojalá ahora se entienda un poco mejor.

Gracias por tu ayuda colega.

Northern 23-06-2008 12:05:42

No uses un for, usa un while o un repeat


Saludos

Black_Ocean 24-06-2008 01:54:25

Hola Northern,

Gracias por responderme.

Tienes razón, la única forma de actualizar el contador es usando una sentencia con While, ya que el For es progresivo e inmodificable cuando empieza el cliclo.

Trataré de resolver el dilema con While.

Muchas gracias =)


La franja horaria es GMT +2. Ahora son las 16:27:19.

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