FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sobreescribir metodo ?
Posts: 189
Joined: Wed Apr 05, 2006 09:48 PM
Sobreescribir metodo ?
Posted: Wed Mar 14, 2007 11:56 AM

Hola

Se puede sobreescribir un metodo de una clase  con las nueva extensiones de xharbour   ?

Por ejemplo quiero modificar el metodo paint de la clase timage

Un saludo

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Sobreescribir metodo ?
Posted: Wed Mar 14, 2007 05:40 PM

claro que se puede en la mayoria de los casos, dejame llegar al trabajo por la tarde y te mando unos ejemplos de sobreescitura y de agregar metodos a una clase.

salu2
carlos vargas

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 189
Joined: Wed Apr 05, 2006 09:48 PM
Sobreescribir metodo ?
Posted: Thu Mar 15, 2007 08:21 AM

Gracias Carlos , cuando puedas pones un ejemplo aqui en el foro

un saludo
Posts: 128
Joined: Wed Oct 26, 2005 12:18 PM
Sobreescribir Método
Posted: Fri Mar 16, 2007 04:36 PM
PROCEDURE tDialog_Modify()
  OVERRIDE METHOD Help95 CLASS tDialog WITH MyHelp95
RETURN 
*============================================
#define GWL_EXSTYLE      -20
#define WS_EX_CONTEXTHELP   1024
Static Function MyHelp95()
   Local Self:=qSelf()
   if ::lHelpIcon == NIL
      ::lHelpIcon := .f.
   endif

   if ::lHelpIcon
      SetWindowLong( ::hWnd, GWL_EXSTYLE,;
                              nOr( GetWindowLong( ::hWnd,GWL_EXSTYLE ),;
                                     WS_EX_CONTEXTHELP ) )

   endif

return nil
*============================================
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Sobreescribir metodo ?
Posted: Fri Mar 16, 2007 07:39 PM

ops.
disculpa, se me olvido

salu2
carlos vargas

al inicio de tu aplicacion llama al procedimiento OverrideAndExtend

function main(...)

   ...
   /*sobreescritura y extencion de metodos*/
   OverrideAndExtend()
   ...

return nil
PROCEDURE OverrideAndExtend()

OVERRIDE METHOD DispBegin IN CLASS TWindow WITH KDispBegin
OVERRIDE METHOD DispEnd   IN CLASS TWindow WITH KDispEnd

EXTEND CLASS TFOLDER  WITH METHOD RefreshPages
EXTEND CLASS TFOLDER  WITH METHOD GoFirstControl
EXTEND CLASS TDIALOG  WITH METHOD RefreshDialog

EXTEND CLASS TPRINTER WITH METHOD Cm2Pix

RETURN
/*----------------------------------------------------------------------------------*/

STATIC FUNCTION KDispBegin()

LOCAL SELF := HB_QSelf()

RETURN SELF

/*----------------------------------------------------------------------------------*/

STATIC FUNCTION KDispEnd()

LOCAL SELF := HB_QSelf()

RETURN NIL

/*----------------------------------------------------------------------------------*/

STATIC FUNCTION RefreshDialog( nPos )
    LOCAl Self := HB_QSelf()

aeval( ::aControls, { |oCtrl| oCtrl:Refresh() } )
::aControls[ nPos ]:SetFocus()

RETURN NIL

/*----------------------------------------------------------------------------------*/

STATIC FUNCTION RefreshPages()
    LOCAl Self := HB_QSelf()
    LOCAL oPage

FOR EACH oPage IN ::aDialogs
    aeval( oPage:aControls, { |oCtrl| oCtrl:Refresh() } )
NEXT

RETURN NIL

/*----------------------------------------------------------------------------------*/

STATIC FUNCTION GoFirstControl()
    LOCAL SELF := HB_QSelf()

::aDialogs[1]:aControls[1]:SetFocus()

RETURN NIL

/*----------------------------------------------------------------------------------*/

STATIC FUNCTION Cm2Pix(nCm)
    LOCAL SELF := HB_QSelf()

IF ValType( ::nXOffset ) == "U"
    ::nXoffset := 0
ENDIF

nPix := Max( 0, ( nCm * 10 * ::nHorzRes() / ::nHorzSize() ) - ::nXoffset )

RETURN nPix

/*----------------------------------------------------------------------------------*/
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Sobreescribir metodo ?
Posted: Thu Jun 06, 2013 11:39 PM

Buenas noches,

Retomo el tema porque me interesa y seguramente alguien me ayudará.

¿Como hago cuando necesito agregar una DATA para que funcione un método sobreescrito ó un método agregado a alguna clase?

Por ej. si en la xBrowse quisiera agregar la DATA oMiObjeto

CLASS TXBrowse FROM TControl

   DATA oVScroll,;   // Vertical scrollbar (used internally)
        oHScroll,;   // Horizontal scrollbar (used internally)
        oCapCol,;    // Actual mouse captured column (used internally)
        oSeek,;      // Optional TSay control to display the value of current ::cSeek value
        oDbf         // Just a container for a DBF object for your own use (it is not used by the class)

        oMiObjeto   // Data de un objeto que debo agregar

Gracias.

Rolando :D

Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Sobreescribir metodo ?
Posted: Fri Jun 07, 2013 12:37 AM

Rolando

Es bien fácil!

EXTEND CLASS TXBrowse WITH DATA oMiObjeto

Saludos

Alejandro Cebolido

Buenos Aires, Argentina
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Sobreescribir metodo ?
Posted: Fri Jun 07, 2013 12:40 AM

Gracias Alejandro,

Rolando

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Sobreescribir metodo ?
Posted: Fri Aug 16, 2013 01:27 AM

Buenas noches,

En realidad estoy empezando con esto y tengo una consulta más (que seguramente no será la última):

¿Como hacer para sobreescribir una function de una clase?

Gracias.

Rolando :D

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Sobreescribir metodo ?
Posted: Fri Aug 16, 2013 10:01 AM

La verdad es que no es una buena manera de sobreescribir un método o crear una nueva data.

Imaginad que quereis usar el método original y el sobreescrito.
Además de otros inconvenientes que podemos explicar...

Pienso que lo mejor es crear tu propia clase heredada de la original, es un concepto muy importante en la POO, la ESPECIALIZACION.

Por ejemplo:

CLASS MiTXBrowse FROM TXBrowse // Definicion de mi clase especializada
       DATA oMiObjeto   // Mi data

       METHOD new() CONSTRUCTOR
ENDCLASS

METHOD new() CLASS MiTXBrowse
     ::super:New() // Ejecutamos el metodo de la clase madre
     ::oMiObjeto := Clase():new() // Instanciamos la data tipo objeto
return self

Luego en mi codigo podría hacer esto:

Code (fw): Select all Collapse
oXbrw := TXBrowse():new() // objeto sin cambios
oMiBrw := MiTXBrowse():new() // objeto con nueva data y metodo sobreescrito.
______________________________________________________________________________

Sevilla - Andalucía
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Sobreescribir metodo ?
Posted: Tue Aug 27, 2013 01:09 PM

Saludos:

He intentado probar con Harbour pero no funciona, al compilar me salen los siguientes errores:

Compiling 'Virtual.prg'...
Virtual.prg(725) Error E0030  Syntax error "syntax error at 'METHOD'"
Virtual.prg(726) Error E0030  Syntax error "syntax error at 'METHOD'"
Virtual.prg(728) Error E0030  Syntax error "syntax error at 'CLASS'"
Virtual.prg(729) Error E0030  Syntax error "syntax error at 'CLASS'"
Virtual.prg(730) Error E0030  Syntax error "syntax error at 'CLASS'"
Virtual.prg(732) Error E0030  Syntax error "syntax error at 'CLASS'"
6 errors

No code generated.

Por lo que se es que solo funciona con xHarbour, existe alguna manera de hacerlo con Harbour..?

Saludos. :mrgreen: :mrgreen:

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Sobreescribir metodo ?
Posted: Tue Aug 27, 2013 01:22 PM

include hbcompat.ch

y ademas incluye la libreria xhb.lib que tiene compatibiliad con xharbour.

salu2

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Sobreescribir metodo ?
Posted: Tue Aug 27, 2013 01:23 PM

en los repositorios de harbour esta una carpeta xhb en contrib, ahi estan varios ch que dan soporte a esto.
normalmente no esta incluido en los binarios por lo que sera necesario que los tomes y los incluyas en el include de harbour.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)

Continue the discussion