Sobreescribir metodo ?

Sobreescribir metodo ?

Postby Frafive » 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
Frafive
 
Posts: 189
Joined: Wed Apr 05, 2006 9:48 pm

Postby carlos vargas » Wed Mar 14, 2007 5: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)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Postby Frafive » Thu Mar 15, 2007 8:21 am

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


un saludo
Frafive
 
Posts: 189
Joined: Wed Apr 05, 2006 9:48 pm

Sobreescribir Método

Postby César E. Lozada » Fri Mar 16, 2007 4: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
*============================================
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela

Postby carlos vargas » Fri Mar 16, 2007 7:39 pm

ops.
disculpa, se me olvido

salu2
carlos vargas

al inicio de tu aplicacion llama al procedimiento OverrideAndExtend

Code: Select all  Expand view  RUN
function main(...)

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

return nil



Code: Select all  Expand view  RUN
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



Code: Select all  Expand view  RUN
/*----------------------------------------------------------------------------------*/

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)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Sobreescribir metodo ?

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

Code: Select all  Expand view  RUN
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
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Sobreescribir metodo ?

Postby TecniSoftware » Fri Jun 07, 2013 12:37 am

Rolando

Es bien fácil!

EXTEND CLASS TXBrowse WITH DATA oMiObjeto

Saludos
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: Sobreescribir metodo ?

Postby rolando » Fri Jun 07, 2013 12:40 am

Gracias Alejandro,

Rolando
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Sobreescribir metodo ?

Postby rolando » Fri Aug 16, 2013 1: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
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Sobreescribir metodo ?

Postby xmanuel » 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:
Code: Select all  Expand view  RUN

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: Select all  Expand view  RUN

oXbrw := TXBrowse():new() // objeto sin cambios
oMiBrw := MiTXBrowse():new() // objeto con nueva data y metodo sobreescrito.
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Sobreescribir metodo ?

Postby cuatecatl82 » Tue Aug 27, 2013 1:09 pm

Saludos:

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

Code: Select all  Expand view  RUN
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
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Sobreescribir metodo ?

Postby carlos vargas » Tue Aug 27, 2013 1: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)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Sobreescribir metodo ?

Postby carlos vargas » Tue Aug 27, 2013 1: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)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot], JoséQuintas and 35 guests