Desde hace un mes aproximadamente, comencé a utilizar la instrucción INIT PROCEDURE para realizar las tareas previas a la creación de la ventana principal: crear bases de datos e índices que no existan, inicializar variables públicas… etc. Hablando hoy por el msn con mi profe, se lo he contado y a pesar de que la conversación era escrita, creo que hasta he podido oír el grito que me ha soltado ;-)
Parece ser que esta instrucción da muchos problemas, y de hecho yo los estaba teniendo sin saber de dónde venían. La solución que me ha enseñado consiste en crear una clase tApplication (tApp) y creando un objeto público oApp realizar las tareas en el método constructor.
Al comienzo de la función principal creo el objeto:
PUBLIC oApp
oApp := tApp():new()
En el método constructor de la clase inicializo las variables generales y preparo todo:
METHOD New() CLASS tApp
::cVersion := "Awkward 1.0"
::cIniFile := ".\awkward.ini"
::cUnidad := diskName() + ":\"
::cPathRuta := ::cUnidad + curDir( diskName() ) + "\"
::cDataRuta := ".\data\"
::cImagesRuta := ".\images\"
::cSoundRuta := ".\sound\"
REQUEST DBFCDX
rddSetDefault( "DBFCDX")
::CreaDbfCdx()
RETURN Self
De esta forma puedo acceder a estas variables tan generales desde todo el programa, ahorrar memoria, y de forma limpia incluir todas las instrucciones para la preparación del programa.
comentarios (5) |
Yo he detectado muchos fallos en el On Init, al menos cuando compilo con Harbour ... por eso hace tiempo utilizo la clase tApplication, con todas las propiedades y métodos que voy a utilizar en la aplicación.
Saludos :-)
Jaime, para rizar mas el rizo, y aprovechar las ventajas de una variable estatica frente a una variable publica , este sistema es mas potente:
Static oApp
Function Main()
oApp := Tapp():New()
.... codigo .....
... mas codigo ;) ....
return NIL
Funciotn GetObjApp(); Return oApp
Despues , DESDE cualquier sitio, puedes hacer
Local oApp := GetObjApp()
Ya esta! , simplemente llamando a una funcion, obtienes en la variable el objeto de TApp().
Recuerda , muerte a las PUBLIC / PRIVATES ;)
Saludos
Muy bueno, Rafa.
No se me había ocurrido eso. Jose Alfonso me dijo que él tenía una STATIC que se iba pasando por toda la aplicación, pero yo por comodidad preferí hacer una PUBLIC. Ahora mismo me pongo con este nuevo sistema. Gracias!
Saludos amigos,
Estoy algo nuevo con esto de las clases, objetos en xBase, aunque trabajo con Visual Basic, son casi invisibles cuando creas una aplicación... pero me encanta echar codigo, y mas con mi querido Clipper, estos ejemplos se aplican a Clipper 5.2e tambien? Necesito FiveWin o alguna libreria especial? Si saben de algun manual de clases mucho les agradeceria...
Jinme,
Si quieres aprender la sintaxis de las clases de Fivewin (libreria para Clipper, Harbour y xHarbour que permite crear aplicaciones Windows), puedes visitar el apartado sobre programación xBase de mi otra web: www.irusoft.com .
En los manuales, encontrarás 5 sobre POO (Programación Orientada a Objetos).
Enseñan a entender y a crear clases y controles con el motor de objetos Objects, el de Fivewin.
Rápido que en 15 días me quitan el dominio! ;-)