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.

Intentando sin exito implementar un metodo en TForm

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Intentando sin exito implementar un metodo en TForm

Mensaje por Carlos Ortiz »

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)

Código: Seleccionar todo

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
Gracias
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Intentando sin exito implementar un metodo en TForm

Mensaje por jfgimenez »

Carlos,

el problema es: ¿quién llama a FormDestroy()?

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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder