In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Estoy tratando de implementar un metodo FormDestroy en la clase TForm propia, use la tForm vacia y la incluí en el proyecto, defini el metodo pero no logro que al cerrar cualquier form del proyecto se ejecte el FormDestroy que indico mas abajo (el problema es que me quedan unos Alias abiertos)
METHOD FormDestroy CLASS TForm
local oControl
logdebug("cerrando form")
FOR each oControl IN Self
IF valtype(oControl)="O"
IF oControl:IsKindOf( "TDBBrowse" ) // Es un objeto browse
oControl:oFont := Nil
IF oControl:oDataSet#Nil
IF oControl:oDataSet:IsKindOf( "TODbcDataSet" ) // Tipo ODBC
oControl:oDataSet:Close() // la cierro asi se elimina el cursor
oControl:oDataSet:Destroy() // la cierro asi se elimina el cursor
logdebug("cerro un dataset y su alias")
ELSEIF oControl:oDataSet:IsKindOf( "TSQLQuery" ) // Tipo ADO
oControl:oDataSet:Close() // la cierro
oControl:oDataSet:Destroy() // la cierro asi se elimina el cursor
ENDIF
ENDIF
ENDIF
ENDIF
NEXT
RETURN Nil
En principio nadie, salvo que tú lo estés llamando desde algún sitio. En un formulario normal diseñado desde el IDE (p.ej. TForm1), cuando haces doble clic en el evento OnDestroy, el IDE crea automáticamente el método FormDestroy() y se lo asigna al evento. Puedes verlo en el archivo .xfm correspondiente.
Pero si lo que estás creando es una clase por código, que hereda de TForm, entonces tienes dos opciones: o asignas tú el evento a ese método, o sobrecargas el método correspondiente de la clase padre (en este caso Destroy()), teniendo siempre cuidado de llamar al ::Super