Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-06

Pregunta sobre FreeAndNil

6 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

christian Ortiz

Hola a todos

tengo un problema

he credo una clase que se encarga de crear dinamicamente panels y statictex dentro de los paneles.

estos paneles (pueden ser de 1 a N ) se crean dentro de un scrollbox (puede ser dentro del mismo form).

Creo a mi clase de esta forma

Miclase = Tmyclase.create(mis parametros)

la pregunta es: como puedo liberar todos los componentes creados?, poner solo FreeAnNil(Miclase), no resulta xq aun se ven los objetos en el form aun q ya no hacen referencia a nada. TEndria que liberros uno a uno??????

Christian ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100614/39226a48/attachment.html>

Reply by email

Maxi
to christian Ortiz

2010/6/14 christian Ortiz <xortix en gmail.com>:

Show quoted text 27 lines
Hola a todos tengo un problema he credo una clase que se encarga de� crear dinamicamente panels y statictex dentro de los paneles. estos paneles (pueden ser de 1 a N ) se crean dentro de un scrollbox (puede ser dentro del mismo form). Creo a mi clase de esta forma Miclase = Tmyclase.create(mis parametros) la pregunta es: como puedo liberar todos los componentes creados?, poner solo FreeAnNil(Miclase), no resulta xq aun se ven los objetos en el form aun q� ya no hacen referencia a nada. TEndria que liberros uno a uno?????? -- Christian _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

en teoria, si pones como pariente a un contenedor al liberar el contenedor se liberan los objetos hijos. Sino podes recorrer los objetos e ir liberandolos en el metodo destroy de tu clase.

Twitter: @nenunocomar Maximiliano Duarte Linux User #495070 Ubuntu User #28504 El que pregunta aprende, y el que contesta aprende a responder.

Reply by email

christian Ortiz
to Maxi

El 14 de junio de 2010 13:27, Maxi <maximiliano.duarte en gmail.com> escribi�:

Show quoted text 37 lines
2010/6/14 christian Ortiz <xortix en gmail.com>: > Hola a todos > > tengo un problema > > he credo una clase que se encarga de crear dinamicamente panels y statictex > dentro de los paneles. > > estos paneles (pueden ser de 1 a N ) se crean dentro de un scrollbox (puede > ser dentro del mismo form). > > Creo a mi clase de esta forma > > Miclase = Tmyclase.create(mis parametros) > > la pregunta es: como puedo liberar todos los componentes creados?, poner > solo FreeAnNil(Miclase), no resulta xq aun se ven los objetos en el form aun > q ya no hacen referencia a nada. TEndria que liberros uno a uno?????? > > -- > Christian > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > > en teoria, si pones como pariente a un contenedor al liberar el contenedor se liberan los objetos hijos. Sino podes recorrer los objetos e ir liberandolos en el metodo destroy de tu clase.

gracias,

probe con FreeAnNil(MyObjects)

pero eso falla, pero si hago

myobjest.free;
myobjects:=nil;

eso si fnciona .... saben porque?

Show quoted text 16 lines
-- Twitter: @nenunocomar Maximiliano Duarte Linux User #495070 Ubuntu User #28504 El que pregunta aprende, y el que contesta aprende a responder. _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Christian ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100614/344c826b/attachment-0001.html>

Reply by email

José Mejuto
to christian Ortiz

Hello christian,

Monday, June 14, 2010, 10:28:54 PM, you wrote:

cO> probe con FreeAnNil(MyObjects)
cO> pero eso falla, pero si hago
cO> myobjest.free;
cO> myobjects:=nil;
cO> eso si fnciona .... saben porque?

Por que est�s haciendo algo mal, ya que FreeAndNIL hace exactamente eso. A menos que lo que falle sea que no compile, entonces la causa es otra.

Si quieres borrar tus objectos con un simple free en qu� contenedor los tienes ? En un TObjectList ?

Best regards, Jos�

Reply by email

christian Ortiz
to José Mejuto

El 14 de junio de 2010 17:36, Jos� Mejuto <joshyfun en gmail.com> escribi�:

Show quoted text 12 lines
Hello christian, Monday, June 14, 2010, 10:28:54 PM, you wrote: cO> probe con FreeAnNil(MyObjects) cO> pero eso falla, pero si hago cO> myobjest.free; cO> myobjects:=nil; cO> eso si fnciona .... saben porque? Por que est�s haciendo algo mal, ya que FreeAndNIL hace exactamente eso.

Plop :p

A menos que lo que falle sea que no compile, entonces la causa es otra.

Compila normal ...

Si quieres borrar tus objectos con un simple free en qu� contenedor los tienes ? En un TObjectList ?
TobjectList, mmm uso arrays de componentes por ejemplo:
FullPanels : Array of Panels;

ahora en el mismo destructor pongo

FreeAndNil(FullPanels[i]) // recorro el i y me manda error al ejecutar el destructor

le cambio por
fullPanels[i].free;
fullPanels[i]:=nil;

y esto si funciona en el mismo destructor

Show quoted text 11 lines
-- Best regards, Jos� _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Christian ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100614/cfe9181c/attachment.html>

Reply by email

José Mejuto
to christian Ortiz

Hello christian,

you wrote
> Por que est�s haciendo algo mal, ya que FreeAndNIL hace exactamente > eso.

cO> Plop :p

:) :) :)

> A menos que lo que falle sea que no compile, entonces la causa es > otra.

cO> Compila normal ...

Ah! bien...

cO> TobjectList, mmm uso arrays de componentes por ejemplo: cO> FullPanels : Array of Panels;
cO> ahora en el mismo destructor pongo
cO> FreeAndNil(FullPanels[i]) // recorro el i y me manda error al ejecutar el cO> destructor

Bueno, esto ya huele a fallo del compilador o similar, ya que FreeAndNIL espera un par�metros (TObject) modificable, si le pasas un elemento de un array no es exactamente lo mismo y es posible que se est� equivocando. Versi�n del compilador fpc ?

cO> le cambio por
cO> fullPanels[i].free;
cO> fullPanels[i]:=nil;
cO> y esto si funciona en el mismo destructor

Es lo mismo, s�lo hay una diferencia en como funciona FreeAndNIL y es en el caso de que el free lance una excepci�n. B�sicamente lo que hace FreeAndNIL es:

tmp:=fullPanels[i];
FullPanels[i]:=nil;
tmp.free;
De este modo, aunque el .free lance una excepci�n, el :=nil siempre se
ha ejecutado. Vamos que deber�a llamarse NILAndFree :)

Por cierto, en vez del array ser�a m�s l�gico (a mi modo de verlo) usar un TObjectList, ya que cuando borras un elemento del TObjectList el free se invoca autom�ticamente, al igual que cuando haces un free sobre el TObjectList, liberando todos los objetos.

Best regards, Jos�

Reply by email