FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ¿Mejor forma de mantener compatibilidad con clases FW?
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Sun Jun 02, 2019 06:41 PM
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 (fw): Select all Collapse
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!
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 09:01 AM

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.

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 09:10 AM

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,

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 12:50 PM
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 ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 01:31 PM
Aquí va una muestra :

Code (fw): Select all Collapse
#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
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 01:35 PM
AngelSalom wrote:Aquí va una muestra :

Code (fw): Select all Collapse
#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 ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 02:03 PM
Así es.
Si te fijas, por ejemplo en :

Code (fw): Select all Collapse
METHOD Click() CLASS VCheckBox

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

return nil


Hago los procesos que me interesan y luego con el mandato
Code (fw): Select all Collapse
::Super:Click()
llamo al método Click de la clase principal (en este caso TCheckBox)
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: ¿Mejor forma de mantener compatibilidad con clases FW?
Posted: Mon Jun 03, 2019 02:04 PM
AngelSalom wrote:Así es.
Si te fijas, por ejemplo en :

Code (fw): Select all Collapse
METHOD Click() CLASS VCheckBox

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

return nil


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


Muchas gracias

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Continue the discussion