Antonio. Sobre el nombre de las Clases

Antonio. Sobre el nombre de las Clases

Postby miarcod » 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

Code: Select all  Expand view  RUN
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?
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Postby Antonio Linares » Thu Oct 20, 2005 3: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby miarcod » Thu Oct 20, 2005 8: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
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Postby Juan Gálvez » Fri Oct 21, 2005 10:14 am

Quizás pueda servir algo así :
Code: Select all  Expand view  RUN
CLASS MiBtn FROM TBNTBMP
.....
   METHOD ClassName() INLINE "TBTNBMP"
.....
ENDCLASS

Saludos
Juan Gálvez
 
Posts: 14
Joined: Fri Oct 21, 2005 10:05 am

Postby miarcod » Fri Oct 21, 2005 7: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:
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 62 guests