Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
Exclamation Indice incorrecto

Hola,
haber si alguien me puede explicar porque este codigo, despues de correr, me indica "indice incorrecto". Este el el codigo:

Código:
var
  Cadena : String;
  J, I : Integer;
begin
  OpenDialog1.Title := 'Borrar dia ...';
  If OpenDialog1.Execute Then
   begin
   I := Pos(',',OpenDialog1.FileName) - 3;
   Cadena := Copy(OpenDialog1.FileName,I,20);
   Label2.Caption := Cadena;
   If MessageDlg('Estas a punto de borrar un dia, ¡estas seguro!',mtConfirmation,
   [mbYes,mbNo],0) = IdYes Then
    For J := 0 To TreeView1.Items.Count - 1 Do
     If (Cadena = TreeView1.Items[J].Text) Then
      Begin
      DeleteFile(OpenDialog1.FileName);
      TreeView1.Items[J].Selected := True;
      TreeView1.Selected.Delete;
      MessageDlg('El archivo ha sido borrado con exito',mtInformation,[mbOk],0)
      End;
   end;
end;
Exactamente, me corre el codigo perfectamente, pero cuando acaba y borro el archivo deseado me indica "Incorrecto indice", y me indica esta sentencia If (Cadena = TreeView1.Items[J].Text) Then.

Alguien me puede explicar porque, porque no lo entiendo, gracias de antemano

Última edición por VolaRe fecha: 22-02-2004 a las 12:23:33.
Responder Con Cita
  #2  
Antiguo 21-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Y por qué en lugar de
Código:
      TreeView1.Items[J].Selected := True;
      TreeView1.Selected.Delete;
no haces directamente
Código:
      TreeView1.Items[J].Delete;
????

PD: te aconsejo el uso de la etiqueta CODE para poner código
Responder Con Cita
  #3  
Antiguo 22-02-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
Unhappy Aun me sale el error

Pues tambien tienes razon, para que poner dos lineas de codigo si con una me hace lo mismo. Pero me sigue saliendo el mismo error "Indice invalido".

Código:
 If Cadena = TreeView1.Items[J].Text Then
Me señala exactamente esta sentencia, y no se que tiene esa sentencia de mal, si me lo pudieras aclarar te lo agradeceria

Última edición por VolaRe fecha: 22-02-2004 a las 12:24:27.
Responder Con Cita
  #4  
Antiguo 22-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Bueno, el error te lo marca por culpa del bucle for. Es decir, tu incrementas el contador J hasta TreeView1.Items.Count - 1, que en un bucle for (si no voy equivocado) lo tomará como una constante (5, 6, 7, los que sean). Al hacer un delete durante la iteración del mismo, llega un momento en que te pasarás de rango.

Cambia el bucle for por uno while (en el que, por cada iteración, se evaluará la expresión) y nos comentas.

PD: bien por la etiqueta CODE!!!
Responder Con Cita
  #5  
Antiguo 22-02-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
Lightbulb bucle while

cadetill, pues si te digo la verdad no tengo ni idea de como ponerlo en un bucle while, porque qeu le pongo:

Código:
while cadena = TreeView1.Items.Item[J].Text Do
o este...

Código:
while Cadena <> TreeView1.Items.Item[J].Text Do
y todo esto, inicializando "J" fuera del bucle. ¿Y como le digo uqe pase al siguiente registro?. Ahi un metodo en Item[J] que es getnext, pero si lo uso tambien me da "Invalido indicd".

Asi que nano, no tengo ni puta idea de como resolver este problemilla, si me hechases una mano te lo agradeceria un monton, y eso sin contar lo que habre aprendido con esa manilla que me has hechao, sea lo que sea muchas gracias por tu interes
Responder Con Cita
  #6  
Antiguo 22-02-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Prueba a realizar el bucle en sentido inverso, es decir, empenzado por el último elemento.
Responder Con Cita
  #7  
Antiguo 22-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Bueno, puedes probar tambien lo que comenta jplj, es decir

Código:
for j := TreeView1.Items.Count - 1 downto 0 to
o bien con el while que te comentaba

Código:
J := 0;
while J <= TreeView1.Items.Count - 1 do
begin
  if (Cadena = TreeView1.Items[J].Text) Then
  begin
    DeleteFile(OpenDialog1.FileName);
    TreeView1.Items[J].Delete;
    MessageDlg('El archivo ha sido borrado con exito',mtInformation,[mbOk],0);
  end
  else
    inc(J);
end;
La diferencia del while con el for, es que cada iteración se evalua la expresión y, aunque borres un Item, al evaluarse la expresión sabrá si continuar o no. Fíjate que sólo se ha de incrementar el contador J si no se borra ningún Item
Responder Con Cita
  #8  
Antiguo 22-02-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
agradecimiento

Muchas gracias a los dos.

Como habreis comprovado soy un pardillo en esto, asi que no sabeis los quebraderos de cabeza que tenia ya con esto, gracias nuevamente
Responder Con Cita
  #9  
Antiguo 22-02-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
Talking gracias

Cita:
Empezado por jplj
Prueba a realizar el bucle en sentido inverso, es decir, empenzado por el último elemento.

gracias jplj por tu consejo, va a la perfeccion
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:41:24.


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
Copyright 1996-2007 Club Delphi