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
User avatar
Carlos Ortiz
Posts: 846
Joined: Wed Jul 01, 2009 5:44 pm
Location: Argentina - Córdoba
Contact:

Intentando sin exito implementar un metodo en TForm

Postby Carlos Ortiz » Thu Dec 07, 2017 4:10 am

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)

Code: Select all

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
@dbfarma
www.dbfarma.com.ar
User avatar
jfgimenez
Site Admin
Posts: 5620
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Re: Intentando sin exito implementar un metodo en TForm

Postby jfgimenez » Sat Dec 09, 2017 1:02 pm

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

Return to “Spanish”