Comportamiento extraño con activex

06/09/2004 - 17:13 por Alberto Rodriguez | Informe spam
Tengo una clase form (modal) en el esta insertado un control Treeview. Al
momento de liberar en el metodo SALIR no lo libero sino que solo lo oculto
para tomar unos datos desde el form de llamada y luego intento borrarlo.
pero no se libera de la memoria.

el pseudocodigo es mas o menos asi..

local lofrm
lofrm = createobje()
...
lofrm.show(1)
(metodo salir de la clase = this.hide)
...
guardo = lofrm.mipropiedad

y luego lo libero desde la llamada.

lofrm.release()
lofrm = .null.


Nunca se borra ¿que puede pasar? siempre trabaje asi, pero la diferencia es
que este form tiene un control activex. ¿sera eso?

Gracias por la ayuda.

Preguntas similare

Leer las respuestas

#1 Alberto Rodriguez
06/09/2004 - 17:17 | Informe spam
P/D
uso. vfp7 con sp1 y win2000 profesional con sp4


"Alberto Rodriguez" escribió en el mensaje
news:
Tengo una clase form (modal) en el esta insertado un control Treeview. Al
momento de liberar en el metodo SALIR no lo libero sino que solo lo oculto
para tomar unos datos desde el form de llamada y luego intento borrarlo.
pero no se libera de la memoria.

el pseudocodigo es mas o menos asi..

local lofrm
lofrm = createobje()
...
lofrm.show(1)
(metodo salir de la clase = this.hide)
...
guardo = lofrm.mipropiedad

y luego lo libero desde la llamada.

lofrm.release()
lofrm = .null.


Nunca se borra ¿que puede pasar? siempre trabaje asi, pero la diferencia


es
que este form tiene un control activex. ¿sera eso?

Gracias por la ayuda.




Respuesta Responder a este mensaje
#2 Ana María Bisbé york
06/09/2004 - 18:24 | Informe spam
Hola Alberto:

No se si estás utilizando _Screen.ActiveForm en ese caso sí que hay
diferencia. Te copio un pedacito de la traducción de un artículo de Drew
Speedie sobre instanciar y destruir formmularios.

Desafortunadamente, _Screen.ActiveForm no es siempre _Screen.ActiveForm. En
muchas ocasiones donde el formulario activo contiene uno o más controles
ActiveX, _Screen.ActiveForm puede ser una referencia de objeto a un control
ActiveX, NO al formulario que lo contiene.



Cuando se ejecuta Form.Load, THISFORM no se ha instanciado todavía, y no es
el formulario activo _Screen.ActiveForm. Más importante, cualquier
formulario (si existe) que se ejecuta cuando THISFORM se llama se refleja
aun en _Screen.ActiveForm. Así, es como un pestañeo a obtener una referencia
de objeto "libre" al formulario que se está ejecutando cuando se llama
THISFORM, y lo guarda en una propiedad de usuario disponible durante la vida
del THISFORM:



A partir de ahora, THISFORM, puede "hablar" al formulario llamado via la
referencia de objeto THISFORM.oCallingForm object. THISFORM.Destroy
establece en .NULL. THISFORM.oCallingForm object:



Algunas cosas interesantes sobre estas técnicas:

1.. Puede consultar información sobre el formulario llamado antes del
THISFORM.Init, donde se reciben parámetros, aceptando otra configuración que
necesita optimizar lo que ocurre antes de que puedan ser verificados los
parámetros.
2.. No hay necesidad de llamar al formulario para pasar una referencia de
objeto a sí mismo al formulario llamado.
3.. Cuando THISFORM se instancia desde cualquier sitio, como un menú, no
hay sitio para el formulario activo para pasar una referencia de objeto a si
mismo a THISFORM.Init.
4.. Debido a que la referencia de objeto para el formulario llamado se
guarda en una propiedad de usuario de THISFORM, está disponible durante la
vida de THISFORM, luego de _Screen.ActiveForm se actualiza nunca después de
la referencia del formulario llamado.
Espero te ayude en algo,


Saludos,

Ana
www.amby.net

"Alberto Rodriguez" escribió en el mensaje
news:
P/D
uso. vfp7 con sp1 y win2000 profesional con sp4


"Alberto Rodriguez" escribió en el mensaje
news:
> Tengo una clase form (modal) en el esta insertado un control Treeview.


Al
> momento de liberar en el metodo SALIR no lo libero sino que solo lo


oculto
> para tomar unos datos desde el form de llamada y luego intento borrarlo.
> pero no se libera de la memoria.
>
> el pseudocodigo es mas o menos asi..
>
> local lofrm
> lofrm = createobje()
> ...
> lofrm.show(1)
> (metodo salir de la clase = this.hide)
> ...
> guardo = lofrm.mipropiedad
>
> y luego lo libero desde la llamada.
>
> lofrm.release()
> lofrm = .null.
>
>
> Nunca se borra ¿que puede pasar? siempre trabaje asi, pero la diferencia
es
> que este form tiene un control activex. ¿sera eso?
>
> Gracias por la ayuda.
>
>
>
>


Respuesta Responder a este mensaje
#3 Alberto Rodriguez
09/09/2004 - 15:31 | Informe spam
No es el caso pero gracias igual.

"Ana María Bisbé york" escribió en el mensaje
news:
Hola Alberto:

No se si estás utilizando _Screen.ActiveForm en ese caso sí que hay
diferencia. Te copio un pedacito de la traducción de un artículo de Drew
Speedie sobre instanciar y destruir formmularios.

Desafortunadamente, _Screen.ActiveForm no es siempre _Screen.ActiveForm.


En
muchas ocasiones donde el formulario activo contiene uno o más controles
ActiveX, _Screen.ActiveForm puede ser una referencia de objeto a un


control
ActiveX, NO al formulario que lo contiene.



Cuando se ejecuta Form.Load, THISFORM no se ha instanciado todavía, y no


es
el formulario activo _Screen.ActiveForm. Más importante, cualquier
formulario (si existe) que se ejecuta cuando THISFORM se llama se refleja
aun en _Screen.ActiveForm. Así, es como un pestañeo a obtener una


referencia
de objeto "libre" al formulario que se está ejecutando cuando se llama
THISFORM, y lo guarda en una propiedad de usuario disponible durante la


vida
del THISFORM:



A partir de ahora, THISFORM, puede "hablar" al formulario llamado via la
referencia de objeto THISFORM.oCallingForm object. THISFORM.Destroy
establece en .NULL. THISFORM.oCallingForm object:



Algunas cosas interesantes sobre estas técnicas:

1.. Puede consultar información sobre el formulario llamado antes del
THISFORM.Init, donde se reciben parámetros, aceptando otra configuración


que
necesita optimizar lo que ocurre antes de que puedan ser verificados los
parámetros.
2.. No hay necesidad de llamar al formulario para pasar una referencia


de
objeto a sí mismo al formulario llamado.
3.. Cuando THISFORM se instancia desde cualquier sitio, como un menú, no
hay sitio para el formulario activo para pasar una referencia de objeto a


si
mismo a THISFORM.Init.
4.. Debido a que la referencia de objeto para el formulario llamado se
guarda en una propiedad de usuario de THISFORM, está disponible durante la
vida de THISFORM, luego de _Screen.ActiveForm se actualiza nunca después


de
la referencia del formulario llamado.
Espero te ayude en algo,


Saludos,

Ana
www.amby.net

"Alberto Rodriguez" escribió en el mensaje
news:
> P/D
> uso. vfp7 con sp1 y win2000 profesional con sp4
>
>
> "Alberto Rodriguez" escribió en el mensaje
> news:
> > Tengo una clase form (modal) en el esta insertado un control Treeview.
Al
> > momento de liberar en el metodo SALIR no lo libero sino que solo lo
oculto
> > para tomar unos datos desde el form de llamada y luego intento


borrarlo.
> > pero no se libera de la memoria.
> >
> > el pseudocodigo es mas o menos asi..
> >
> > local lofrm
> > lofrm = createobje()
> > ...
> > lofrm.show(1)
> > (metodo salir de la clase = this.hide)
> > ...
> > guardo = lofrm.mipropiedad
> >
> > y luego lo libero desde la llamada.
> >
> > lofrm.release()
> > lofrm = .null.
> >
> >
> > Nunca se borra ¿que puede pasar? siempre trabaje asi, pero la


diferencia
> es
> > que este form tiene un control activex. ¿sera eso?
> >
> > Gracias por la ayuda.
> >
> >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida