Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-01-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cierto, pense lo de mover los valores unicamente como si fuese un array simple. Gracias por la correcion.

Entonces deberia ser algo asi no?

Código Delphi [-]
FColumnas[index].FreeAndNil;

for X := index to length(FColumnas) - 2 do
FColumnas[x] := FColumnas[x+1];

setlength(FColumnas,Length(FColumnas)-1);

esto es, sin tener que recrear todo el array dentro del bucle, sino unicamente moviendo los ya existentes. Creo que ahora si es correcto...

PD: remirando tu codigo y habiendo leido lo que dices del create de TDictionary, creo que el error lo tienes en la linea del mismo. No se bien bien como va, pero me extraña que esta expresion (Columna[x].Create( Columna[x+1] )) funcione. No estas asignando nada a nada, solo llamando al create 'al aire', digamos, sin que se recoja su resultado (de todas maneras le echare un vistazo a la clase TDictionary). Si pruebas Columna[x] := TColumna.Create(Columna[x+1]) te falla tambien? Saludos.

Última edición por coso fecha: 17-01-2011 a las 13:14:11.
Responder Con Cita
  #2  
Antiguo 17-01-2011
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 20
yapt Va por buen camino
Cita:
Empezado por coso Ver Mensaje
Cierto, pense lo de mover los valores unicamente como si fuese un array simple. Gracias por la correcion.

Entonces deberia ser algo asi no?



Código Delphi [-]
FColumnas[index].FreeAndNil;
 
for X := index to length(FColumnas) - 2 do
FColumnas[x] := FColumnas[x+1];
 
setlength(FColumnas,Length(FColumnas)-1);



esto es, sin tener que recrear todo el array dentro del bucle, sino unicamente moviendo los ya existentes. Creo que ahora si es correcto...
Si.... así debería ser lo mismo. Y sin hacer un create, cada vez, a cada "columna" (elemento del array).

Debería ser mucho más eficiente. Pero no explica el problema (todavía)...

Cita:
Empezado por coso Ver Mensaje
PD: remirando tu codigo y habiendo leido lo que dices del create de TDictionary, creo que el error lo tienes en la linea del mismo. No se bien bien como va, pero me extraña que esta expresion (Columna[x].Create( Columna[x+1] )) funcione. No estas asignando nada a nada, solo llamando al create 'al aire', digamos, sin que se recoja su resultado (de todas maneras le echare un vistazo a la clase TDictionary). Si pruebas Columna[x] := TColumna.Create(Columna[x+1]) te falla tambien? Saludos.
Columna, realmente, apunta al array. Si te fijas es una propiedad de la clase, que lo que devuelve es un elemento (al que apunta el índice), que es un elemento del array FColumnas.

Código Delphi [-]
 //Y el array de 
  FColumnas //, es un Array de objetos 
     TColumnaDic //, que a su vez, es un objeto 
         TDictionary //que, finalmente, es una colección (lista) de valores.
Es decir, poniendo un ejemplo en "pseudocódigo":
Código Delphi [-]
Columna[x] = Lista de elementos que contienen string, boolean)>

Por tanto:
Código Delphi [-]
Columna[x].Create( Columna[x+1] )

Lo que hace es llamar al método create de TDictionary, pasandole como parámetro otro TDictionary que ya existe, con lo que el objeto se crea y los valores, se copian.

Como digo, ya no es importante, pues está funcionando (con un TList) y veo que se está complicando en exceso.

Me gustaría saber por qué sucedía el problema y seguiré respondiendo cualquier pregunta al respecto. Pero no hay prisa.

:-)

Gracias coso.
Responder Con Cita
  #3  
Antiguo 17-01-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Pero, aun ser un TDictionary (ya mire un poquillo la documentacion al respecto, es no mas que un TList doblemente referenciado), el create que haces no lo asignas a absolutamente nada. Es como hacer, por ejemplo:

Código Delphi [-]

TForm.Create;

En verdad creas un form, pero al no estar asignado a nada, no puedes referenciarlo. Usando Columnas[x].Create(Columnas[x+1]) (tal como si usaras FColumnas, el ser propiedad es irrelevante) llamas al metodo Create de Columnas, te crea un objeto TColumnDict con los valores de Columnas[x+1], pero no lo asignas a Columnas[x]. Llamas al create del objeto, que te devuelve un TColumnDict, pero se queda perdido, no se guarda en el objeto que ha llamado a create. A eso voy, que me da que el fallo es precisamente la falta de asignacion. Probaste asignandolo? Seria algo asi :

Código Delphi [-]

FColumnas[x] := TColumnDict.Create(FColumnas[x+1]);

Prueba y nos cuentas. Mas que nada para que quede el hilo cerrado si es lo correcto. Un saludo.

Última edición por coso fecha: 17-01-2011 a las 15:11:25.
Responder Con Cita
  #4  
Antiguo 17-01-2011
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 20
yapt Va por buen camino
Hummmm.....

pues me da que has dado con el asunto.

Mañana y pasado estoy de curso. Supongo que el jueves tendré la mesa con 20 temas..... pero lo pruebo antes del domingo.

Ya remito aquí los resultados.

Saludos y muchas gracias..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Invalid Pointer Operation FerCastro Varios 3 23-02-2010 21:47:26
Invalid Pointer operation Dll mcarazas Varios 2 15-10-2008 21:45:14
Invalid Pointer operation Dll mcarazas Varios 0 15-10-2008 16:42:23
invalid pointer operation muppett Varios 1 05-03-2008 00:17:55
QR - Invalid Pointer Operation alapaco OOP 6 07-06-2006 22:43:31


La franja horaria es GMT +2. Ahora son las 02:40:00.


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