Page 1 of 1

Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 11:20 am
by Xevi
Ahora estoy con tema de Clase propia para disponer de ella en la aplicación.

Resulta que crear una clase con DATAs no hay problema, el caso es que a medida que voy escribiendo código de mi aplicación, igual necesito de una DATA más en esa clase, y pretendo crearla, pero sin tener que ir a buscar la clase y añadir
//...
DATA cUnaDataMas
//...

Para eso, pensava echar mano de EXTEND CLASS

Y poder mandarle desde código de un prg mismo...
AppData():AddData( "cUnaDataMas" )

Code: Select all  Expand view

CLASS AppData
   DATA cargo

   METHOD AddData( cData )

ENDCLASS

METHOD AddData( cData ) CLASS AppData

   EXTEND CLASS AppData WITH DATA cData  //Per crear una DATA en una clase

return Nil
 


Pero no se como hacerlo para que me coja el valor enviado, pues me crea una data, si, pero me crea cData y no cUnaDataMas

Gracias

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 11:24 am
by Antonio Linares
Prueba así:

EXTEND CLASS AppData WITH DATA ( cData )

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 11:43 am
by Xevi
Sintax error.

Tambien probado con...
EXTEND CLASS AppData WITH DATA (cData)
EXTEND CLASS AppData WITH DATA &(cData)
EXTEND CLASS AppData WITH DATA &cData

Siempre Sintax error al compilar

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 11:51 am
by cnavarro

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 11:53 am
by Antonio Linares
Xevi,

Usa directamente el preprocesado de ese comando:

#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.> ) )


Llama directamente a la función __clsAddMsg() con los parámetros adecuados

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 11:56 am
by Antonio Linares
Mejor con la función que te ha indicado Cristobal que lo que hace es llamar finalmente a __clsAddMsg()

FUNCTION __objAddData( oObject, cSymbol )

LOCAL nSeq, hClass

IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol )
__errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) )
ELSEIF ! __objHasMsg( oObject, cSymbol ) .AND. ! __objHasMsg( oObject, "_" + cSymbol )
hClass := oObject:ClassH
nSeq := __cls_IncData( hClass ) // Allocate new Seq#
__clsAddMsg( hClass, cSymbol, nSeq, HB_OO_MSG_ACCESS, , 1 )
__clsAddMsg( hClass, "_" + cSymbol, nSeq, HB_OO_MSG_ASSIGN, , 1 )
ENDIF

RETURN oObject

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 12:26 pm
by Xevi
Hecho!!!

Cristobal, me anoto el Manual de Harbour :lol:
Gracias.

Todavia mas lejos, pues, creo la Data y le doy valor al mismo tiempo.

con
AppData():AddData( "NoSe", "Prueba_NoSe" )


Code: Select all  Expand view

CLASS AppData
   DATA cargo

   METHOD AddData( cData, xValue )

ENDCLASS

METHOD AddData( cData, xValue ) CLASS AppData

*   __objAddData( Self, cData )                           //Solo crea la Data
   __objAddInline( Self, cData, { || xValue } )      //Crea la data y le da valor

return Nil
 

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 1:56 pm
by cnavarro
Xevi wrote:Hecho!!!

Cristobal, me anoto el Manual de Harbour :lol:
Gracias.



Si utilizas FivEdit, al pulsar F1 te aparece el manual

Image

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 2:04 pm
by Xevi
Cristobal,

pulso F1 y...

[img]
Image
[/img]

Re: Crear una clase y datas a petición

PostPosted: Wed Dec 20, 2017 2:08 pm
by cnavarro
Mira tu correo