FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Antonio. Sobre el nombre de las Clases
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Antonio. Sobre el nombre de las Clases
Posted: Thu Oct 20, 2005 12:20 PM
Hola:

El problema que tengo es que si creo una clase heredando de otra ( lo estoy haciendo con btnbmp) el comportamiento de esta clase no es el mismo que el de la clase original.

Esto es debido en que algunas partes del codigo de las clases de Fivewin se controla el nombre de la clase para actuar de una u otra forma.

Creo que este comportaiento no debería depender del nombre de la clase sinó de algún otro dato que tuviese la clase, porque sino una simple modificación de una clase me obliga a modificar la clase principal window y también creo que la clase control.

Yo sólo quiero crear una clase nueva igual que la otra pero con otro nombre, en la que le agregaré una serie de datos adicionales para modificar su comportamiento.

Bueno, ahora la pregunta.

Si tengo el siguiente codigo

CLASS MiBtn FROM TBNTBMP
.....
ENDCLASS

// redefino los métodos constructores para que se ejecuten los metodos del padre

O := MiBtn():New()
o:lCancel := .T.

Pues la clausula cancel no funciona

Como puedo solucionar esto sin tener que modificar la clase WINDOW, control, ... no se cuales más tendría que modificar.
¿Es posible cambiar el nombre de una clase para que tenga uno distinto al que se usó para crearla?
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Antonio. Sobre el nombre de las Clases
Posted: Thu Oct 20, 2005 03:39 PM

Tienes toda la razón. Los nombres de las Clases no deberían usarse directamente en determinadas clases, sino usar el método que comprueba si una determinada clase es igual ó deriva de otra.

Puedes cambiar el nombre de la clase, pero busca en los PRGs donde se está usando el nombre de esa clase, y añade el tuyo tambien.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Antonio. Sobre el nombre de las Clases
Posted: Thu Oct 20, 2005 08:25 PM
Gracias Antonio,

pero hay alguna forma para que pueda cambiar el nombre de la clase

Lo que pretendo es no tener que modificar las clases padres.


Te explico el porqué

Cuando empece a desarrollar con fivewin me encontré en la necesidad de modificar algunas clases para adaptarlas al funcionamiento que quería. El resultado final es el que yo deseaba, pero al cabo de un poco de tiempo decidí actualizar la versión de fivewin y el resultado fué que tuve que volver a modificar mis clases para poder usar las modificaciones que se se habían realizado en algunas de ellas (yo ignoraba e ignoro cuales fueron modificadas). Entonces decidí que no actualizaria la librería porque los problemas que me originaba no me conpensaba y mientras no necesitara otra cosa pues a aguantarse. Hace aproximadadamente un año decidí volver a actualizar y me volvió a pasar lo mismo, el caso es que se me hace bastante complicado el mantenimiento de las clases modificadas.

Como lo resuelvo, bueno pues decido no usar las clases que modifico y en su lugar usar clases heredadas de las originales pero con una serie de comportamientos especificos, reprogramo los metodos que me interesan y el resto los dejo. Al final obtengo una clase con cuatro o cinco métodos modificados que me es muy facil de mantener, pero

Si modifico la clase, por ejemplo Window, y actualizo la libreria no solo tengo que preocuparme de los cambios que afecten a las clases que yo he modificado sinoo de otras que no cambié.

Un saludo y gracias de nuevo
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Antonio. Sobre el nombre de las Clases
Posted: Fri Oct 21, 2005 10:14 AM
Quizás pueda servir algo así :
CLASS MiBtn FROM TBNTBMP 
.....
   METHOD ClassName() INLINE "TBTNBMP"
..... 
ENDCLASS

Saludos
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Antonio. Sobre el nombre de las Clases
Posted: Fri Oct 21, 2005 07:30 PM

Gracias funcionó.

Pero supongo que el nombre de la clase estará registrado en alguna parte de esta, pero no encuentro el data ni el método ClassName definido dentro de la clase.

He rebuscado en Windows y Control, pero no lo encuentro, espero que no me cause futuros problemas.

Un saludo

:shock:

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Antonio. Sobre el nombre de las Clases
Posted: Fri Oct 21, 2005 10:03 PM

Harbour/xHarbour registran automaticamente el nombre de la clase desde la línea CLASS ...

la Clase HBObject de [x]Harbour implementa esos métodos y todas las clases heredan automaticamente de ella. Puedes revisar dicha clase en Harbour/source/rtl/tobject.prg.

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion