Error al sobrecargar un metodo de una clase. (Solucionado)

Post Reply
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Error al sobrecargar un metodo de una clase. (Solucionado)

Post by jvtecheto »

Hola amigos:

No he sobrecargado nunca una funcion de una clase, pero buscando en el foro encontre que se hace asi.

Code: Select all

#include "FiveWin.ch"

OVERRIDE METHOD SaveState IN CLASS TWindow WITH XSaveState


FUNCTION XSaveState()
   
   if !Empty( ::hWnd ) .and. !::IsKindOf( "TCONTROL" ) //.and. !::WinStyle( WS_CHILD )
      return STRTOHEX( GetWindowPlacement( ::hWnd ) )
   endif

return ::Super:SaveState()

OVERRIDE METHOD RestoreState CLASS TWindow WITH XRestoreState

FUNCTION XRestoreState( cState ) 

   if !Empty( ::hWnd ) .and. !Empty( cState ) .and. !::IsKindOf( "TCONTROL" ) //.and. !::WinStyle( WS_CHILD )
      SetWindowPlacement( ::hWnd, HEXTOSTR( cState ) )
   endif

return ::Super:RestoreState(cState)
 
Este codigo es a indicacion de Mr. Rao que tengo que modificar un metodo de la clase TWindow, pero no me gusta tocar las clases originales de Fivewin.

el error al compilar es este.
c:\obraw\source\MODCLASS.prg(3) Error E0030 Syntax error "syntax error at 'METHOD'"

c:\obraw\source\MODCLASS.prg(8) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(8) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(9) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(12) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(14) Error E0030 Syntax error "syntax error at 'METHOD'"

c:\obraw\source\MODCLASS.prg(18) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(18) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(19) Warning W0002 Ambiguous reference, assuming memvar 'SELF'

c:\obraw\source\MODCLASS.prg(22) Warning W0002 Ambiguous reference, assuming memvar 'SELF'
Que estoy haciendo mal.

Gracias por vuestra ayuda inestimable.

Jose.
Last edited by jvtecheto on Fri Nov 01, 2019 7:11 pm, edited 1 time in total.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Error al sobrecargar un metodo de una clase.

Post by cnavarro »

Jose Vicente, por un lado has de definir en las funciones que utilizan ( Self, o lo que es lo mismo :: )

Code: Select all

   Local Self := HB_QSelf()
 
y por otro, intenta definir los OVERRIDE dentro de una function, por ejemplo de la function Main, y prueba, no los pongas en lineas independientes de una function
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Error al sobrecargar un metodo de una clase.

Post by jvtecheto »

Hola Cristobal .

Muchas gracias por la ayuda .

Defino una funcion asi

Code: Select all

FUNCTION Mis_Clases()

OVERRIDE METHOD SaveState IN CLASS TWindow WITH XSaveState
OVERRIDE METHOD RestoreState IN CLASS TWindow WITH XRestoreState

RETURN NIL

FUNCTION XSaveState()

   Local Self:= HB_QSelf()
   
   if !Empty( Self:hWnd ) .and. !Self:IsKindOf( "TCONTROL" ) //.and. !SelfWinStyle( WS_CHILD )
      return STRTOHEX( GetWindowPlacement( Self:hWnd ) )
   endif

return Self:Super:SaveState()

FUNCTION XRestoreState( cState ) 

   Local Self:= HB_QSelf()

   if !Empty( Self:hWnd ) .and. !Empty( cState ) .and. !Self:IsKindOf( "TCONTROL" ) //.and. !SelfWinStyle( WS_CHILD )
      SetWindowPlacement( Self:hWnd, HEXTOSTR( cState ) )
   endif

return Self:Super:RestoreState(cState)

 
Y la llamo desde la funcion Main()

Code: Select all

MisClases()
 
Me sigue dando error en la linea

Code: Select all

OVERRIDE METHOD SaveState IN CLASS TWindow WITH XSaveState
 
error de sintaxis en METHOD ,

Creo que deberia tener un include de este archivo.

Code: Select all

#include "\harbour\contrib\xhb\xhbcls.ch"
 
Yo no tengo la carpeta contrib\xhb y tampoco el fichero .ch

Alguien que haya sobrecargado algun metodo de una clase me puede informar como lo ha hecho el.

Muchisimas gracias.

Jose.
Last edited by jvtecheto on Fri Nov 01, 2019 4:13 pm, edited 3 times in total.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Error al sobrecargar un metodo de una clase.

Post by cnavarro »

jvtecheto wrote:Hola Cristobal .

Code: Select all

OVERRIDE METHOD SaveState CLASS TWindow WITH XSaveState
 
Y me dice error de sintaxis en METHOD ,
Jose.
Prueba asi a ver si te funciona

Code: Select all

OVERRIDE METHOD SaveState IN CLASS TWindow WITH XSaveState
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Error al sobrecargar un metodo de una clase.

Post by jvtecheto »

Hola Cristobal:

Perdona pero lee el mensaje anterior (Lo he modificado) , con todo esto que te explico sigue dandome el error , creo que me falta el fichero .ch que informo en el correo.

este.

Code: Select all

#include "\harbour\contrib\xhb\xhbcls.ch"
 
Como te digo yo no lo tengo en mi version de Harbour (La que provee Fivetech).

Sigo buscando , muchas gracias.

Saludos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
EBM
Posts: 123
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: Error al sobrecargar un metodo de una clase.

Post by EBM »

Hola José,

Te paso el contenido del archivo xhbcls.ch:



#ifndef XHB_CLS__CH_
#define XHB_CLS__CH_

#ifdef __HARBOUR__

#ifndef __XHARBOUR__

#include "hboo.ch"

#xtranslate __xhb_cls_scope( <scope>, .T. ) => <scope> + HB_OO_CLSTP_PERSIST
#xtranslate __xhb_cls_scope( <scope>, .F. ) => <scope>
#xtranslate __xhb_cls_scope( , .T. ) => HB_OO_CLSTP_PERSIST
#xtranslate __xhb_cls_scope( , .F. ) =>

#xcommand OVERRIDE METHOD <!Message!> [IN] CLASS <!Class!> ;
WITH [METHOD] <!Method!> [SCOPE <Scope>] => ;
__clsModMsg( <Class>():classH, #<Message>, @<Method>() )


#xcommand EXTEND CLASS <!Class!> WITH <data: DATA, VAR> <!VarName!> ;
[SCOPE <scope>] [<persist: PERSISTENT>] ;
[<case: NOUPPER>] => ;
__clsAddMsg( <Class>():classH, #<VarName>, ;
__cls_IncData( <Class>():classH ), ;
HB_OO_MSG_PROPERTY, NIL, ;
__xhb_cls_scope( <scope>, <.persist.> ) )

#xcommand EXTEND CLASS <!Class!> WITH METHOD <!Method!> [SCOPE <scope>] ;
[<persist: PERSISTENT>] [<case: NOUPPER>] => ;
__clsAddMsg( <Class>():classH, #<Method>, @<Method>(), ;
HB_OO_MSG_METHOD, NIL, ;
__xhb_cls_scope( <scope>, <.persist.> ) )


#xcommand EXTEND CLASS <!Class!> WITH MESSAGE <!Message!> METHOD <!Method!> ;
[SCOPE <scope>] [<persist: PERSISTENT>] ;
[<case: NOUPPER>] => ;
__clsAddMsg( <Class>():classH, #<Message>, @<Method>(), ;
HB_OO_MSG_METHOD, NIL, ;
__xhb_cls_scope( <scope>, <.persist.> ) )

#xcommand EXTEND CLASS <!Class!> WITH MESSAGE <!Message!> INLINE <code,...> ;
[SCOPE <scope>] [<persist: PERSISTENT>] ;
[<case: NOUPPER>] => ;
__clsAddMsg( <Class>():classH, #<Message>, ;
{| Self | HB_SYMBOL_UNUSED( Self ), <code> }, ;
HB_OO_MSG_INLINE, NIL, ;
__xhb_cls_scope( <scope>, <.persist.> ) )

#xcommand EXTEND CLASS <!Class!> WITH MESSAGE <Message>( <params,...> ) ;
INLINE <code,...> ;
[SCOPE <scope>] [<persist: PERSISTENT>] ;
[<case: NOUPPER>] => ;
__clsAddMsg( <Class>():classH, #<Message>, ;
{| Self, <params> | HB_SYMBOL_UNUSED( Self ), <code> }, ;
HB_OO_MSG_INLINE, NIL, ;
__xhb_cls_scope( <scope>, <.persist.> ) )

#endif /* __XHARBOUR__ */


#endif /* __HARBOUR__ */

#endif /* XHB_CLS__CH_ */



Espero te ayude

Saludos!

Eduardo Borondón Muñiz
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Error al sobrecargar un metodo de una clase.

Post by jvtecheto »

Muchas gracias Eduardo

Ahora compila sin error.

Enviado desde mi POCOPHONE F1 mediante Tapatalk
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
Post Reply