Page 1 of 1

¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Sun Jun 02, 2019 6:41 pm
by AngelSalom
Hola amigos, tengo previsto actualizar mi versión de FW en breve. En estos años he hecho varias modificaciones a mi conveniencia sobre las clases de FW originales. Ahora que voy a actualizar voy a hacer las cosas mejor intentando que los cambios que necesite para personalizar mi forma de trabajo y/o aplicaciones sean compatibles con futuras actualizaciones.
¿Qué método me recomendáis?

a) Utilizar la adición/modificación de métodos mediante EXTEND y OVERRIDE
b) Crear clases heredadas de las originales, añadir las datas y métodos propios y redefinir los coincidentes con los originales y que tenga que cambiar por ejemplo :

Code: Select all  Expand view

CLASS VCheckBox FROM TCheckBox

   DATA lPulsado AS LOGICAL INIT .F.
   METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, bChange, bValid,;
                    nClrFore, nClrBack, cMsg, lUpdate, bWhen ) CONSTRUCTOR
   METHOD Click()  
ENDCLASS

METHOD Click() CLASS VCheckBox

   ::lPulsado:=!::lPulsado
   ::Super:Click()          

return nil

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, bChange, bValid, nClrFore,;
                 nClrBack, cMsg, lUpdate, bWhen, cPrompt ) CLASS VCheckBox

   DEFAULT nClrBack := CLR_WHITE
   ::Super:Redefine ( nId, bSetGet, oWnd, nHelpId, bChange, bValid, nClrFore,;
                              nClrBack, cMsg, lUpdate, bWhen, cPrompt )
   ::lPulsado  = Eval(bSetGet)

return Self

 


Gracias!

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 9:01 am
by cnavarro
Angel, mi opinión es que aunque ambas soluciones son adecuadas, yo prefiero utilizar la creación de clases por herencia.
De todas formas, sería bueno que fueses poco a poco publicando esos cambios en tus clases porque como sabes somo bastantes sensibles a incluir cambios sugeridos por los usuarios en el código de Fivewin.

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 9:10 am
by AngelSalom
Gracias Cristobal, así lo creo yo también. Crearé nuevas clases heredadas.
Respecto a los cambios, en todos estos años, muchos son pequeñas correcciones que ya se han aplicado (y comentado en el foro), aunque la mayoría son personalizaciones para mi comodidad.
Como tengo que revisar el código si observo algo que pueda ser relevante lo comento sin dudarlo.

Saludos,

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 12:50 pm
by Compuin
AngelSalom wrote:Gracias Cristobal, así lo creo yo también. Crearé nuevas clases heredadas.
Respecto a los cambios, en todos estos años, muchos son pequeñas correcciones que ya se han aplicado (y comentado en el foro), aunque la mayoría son personalizaciones para mi comodidad.
Como tengo que revisar el código si observo algo que pueda ser relevante lo comento sin dudarlo.

Saludos,


Hola

Me interesa el tema. Comose crea una clase heredada ? Algun ejemplo ?

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 1:31 pm
by AngelSalom
Aquí va una muestra :

Code: Select all  Expand view
#include "fivewin.ch"

//----------------------------------------------------------------------------//
//-----------   TCheckBox  ---------------------------------------------------//
//----------------------------------------------------------------------------//

CLASS VCheckBox FROM TCheckBox

   DATA lPulsado AS LOGICAL INIT .F.

   METHOD New( nRow, nCol, cCaption, bSetGet, oWnd, nWidth, nHeight,;
      nHelpTopic, bChange, oFont, bValid, nClrFore, nClrBack,;
      lDesign, lPixel, cMsg, lUpdate, bWhen ) CONSTRUCTOR

   METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, bChange, bValid,;
                    nClrFore, nClrBack, cMsg, lUpdate, bWhen ) CONSTRUCTOR
   METHOD Click()  
ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( nRow, nCol, cCaption, bSetGet, oWnd, nWidth, nHeight, nHelpTopic,;
   bChange, oFont, bValid, nClrFore, nClrBack, lDesign, lPixel,;
   cMsg, lUpdate, bWhen ) CLASS VCheckBox

   DEFAULT nClrBack := CLR_WHITE
   ::lPulsado:=.F.

   ::Super:New (nRow, nCol, cCaption, bSetGet, oWnd, nWidth, nHeight,;
               nHelpTopic, bChange, oFont, bValid, nClrFore, nClrBack,;
               lDesign, lPixel, cMsg, lUpdate, bWhen )

return Self

//----------------------------------------------------------------------------//

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, bChange, bValid, nClrFore,;
                 nClrBack, cMsg, lUpdate, bWhen, cPrompt ) CLASS VCheckBox

   DEFAULT nClrBack := CLR_WHITE
   ::lPulsado:=.F.
   
   ::Super:Redefine ( nId, bSetGet, oWnd, nHelpId, bChange, bValid, nClrFore,;
                     nClrBack, cMsg, lUpdate, bWhen, cPrompt )
   ::lPulsado  = Eval(bSetGet)

return Self

//----------------------------------------------------------------------------//

METHOD Click() CLASS VCheckBox

   ::lPulsado:=!::lPulsado
   ::Super:Click()          

return nil

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 1:35 pm
by Compuin
AngelSalom wrote:Aquí va una muestra :

Code: Select all  Expand view
#include "fivewin.ch"

//----------------------------------------------------------------------------//
//-----------   TCheckBox  ---------------------------------------------------//
//----------------------------------------------------------------------------//

CLASS VCheckBox FROM TCheckBox

   DATA lPulsado AS LOGICAL INIT .F.

   METHOD New( nRow, nCol, cCaption, bSetGet, oWnd, nWidth, nHeight,;
      nHelpTopic, bChange, oFont, bValid, nClrFore, nClrBack,;
      lDesign, lPixel, cMsg, lUpdate, bWhen ) CONSTRUCTOR

   METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, bChange, bValid,;
                    nClrFore, nClrBack, cMsg, lUpdate, bWhen ) CONSTRUCTOR
   METHOD Click()  
ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( nRow, nCol, cCaption, bSetGet, oWnd, nWidth, nHeight, nHelpTopic,;
   bChange, oFont, bValid, nClrFore, nClrBack, lDesign, lPixel,;
   cMsg, lUpdate, bWhen ) CLASS VCheckBox

   DEFAULT nClrBack := CLR_WHITE
   ::lPulsado:=.F.

   ::Super:New (nRow, nCol, cCaption, bSetGet, oWnd, nWidth, nHeight,;
               nHelpTopic, bChange, oFont, bValid, nClrFore, nClrBack,;
               lDesign, lPixel, cMsg, lUpdate, bWhen )

return Self

//----------------------------------------------------------------------------//

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, bChange, bValid, nClrFore,;
                 nClrBack, cMsg, lUpdate, bWhen, cPrompt ) CLASS VCheckBox

   DEFAULT nClrBack := CLR_WHITE
   ::lPulsado:=.F.
   
   ::Super:Redefine ( nId, bSetGet, oWnd, nHelpId, bChange, bValid, nClrFore,;
                     nClrBack, cMsg, lUpdate, bWhen, cPrompt )
   ::lPulsado  = Eval(bSetGet)

return Self

//----------------------------------------------------------------------------//

METHOD Click() CLASS VCheckBox

   ::lPulsado:=!::lPulsado
   ::Super:Click()          

return nil



Segun entiendo esta clase hereda de Checkbox todos sus Datas y Metodos y utiliza los que tu le estas incluyendo en vcheckbox.

Es asi ?

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 2:03 pm
by AngelSalom
Así es.
Si te fijas, por ejemplo en :

Code: Select all  Expand view
METHOD Click() CLASS VCheckBox

   ::lPulsado:=!::lPulsado
   ::Super:Click()          

return nil


Hago los procesos que me interesan y luego con el mandato
Code: Select all  Expand view
::Super:Click()
llamo al método Click de la clase principal (en este caso TCheckBox)

Re: ¿Mejor forma de mantener compatibilidad con clases FW?

PostPosted: Mon Jun 03, 2019 2:04 pm
by Compuin
AngelSalom wrote:Así es.
Si te fijas, por ejemplo en :

Code: Select all  Expand view
METHOD Click() CLASS VCheckBox

   ::lPulsado:=!::lPulsado
   ::Super:Click()          

return nil


Hago los procesos que me interesan y luego con el mandato
Code: Select all  Expand view
::Super:Click()
llamo al método Click de la clase principal (en este caso TCheckBox)


Muchas gracias