/* * $Id$ */ /* * Las siguientes partes son derechos adquiridos de sus autores individuales. * www - http://www.harbour-project.org * * Copyright 2000 Alejandro de G rate * Documentaci¢n en Espa¤ol de: * __objHasData(), __objHasMethod(), __objGetMsgList(), * __objGetMethodList(), __objGetValueList(), * __ObjSetValueList(), __objAddMethod(), * __objAddInline(), __objAddData(), __objModMethod(), * __objModInline(), __objDelMethod(), __objDelInline(), * __objDelData(), __objDerivedFrom() * * Copyright 1999-2000 Chen Kedem * Documentaci¢n en Ingles de: * __objHasData(), __objHasMethod(), __objGetMsgList(), * __objGetMethodList(), __objGetValueList(), * __ObjSetValueList(), __objAddMethod(), * __objAddInline(), __objAddData(), __objModMethod(), * __objModInline(), __objDelMethod(), __objDelInline(), * __objDelData(), __objDerivedFrom() * * Vea doc/license.txt por los t‚rminos de la licencia. * */ /* $DOC$ * $FUNCNAME$ * __objHasData() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Determina cuando un s¡mbolo existe en un objeto como DATA * $SYNTAX$ * __objHasData( , ) --> lExiste * $ARGUMENTS$ * es el objeto a inspeccionar * * es el nombre del s¡mbolo a buscar * $RETURNS$ * __objHasData() retorna .T. si el dado existe como DATA * (variable de instancia) en el objeto * $STATUS$ * R * $COMPLIANCE$ * __objHasData() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __ObjGetMethodList(),__objGetMsgList(),__objHasMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objHasMethod() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Determina cuando un s¡mbolo existe en un objeto como METHOD * $SYNTAX$ * __objHasMethod( , ) --> lExist * $ARGUMENTS$ * es el objeto a inspeccionar * * es el nombre del s¡mbolo a buscar * $RETURNS$ * __objHasMethod() retorna .T. si el dado existe como * METHOD (funci¢n de clase) en el Objeto * $STATUS$ * R * $COMPLIANCE$ * __objHasMethod() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __ObjGetMethodList(),__objGetMsgList(),__objHasData() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objGetMsgList() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Retorna los nombres de todos los DATA o METHOD para un Objeto dado * $SYNTAX$ * __objGetMsgList( , [], [nClassType] ) --> aNombres * $ARGUMENTS$ * es un Objeto a inspeccionar * * es un valor l¢gico opcional que especifica la informaci¢n * a retornar. Un valor .T. instruye a la funci¢n a devolver una lista * todos los nombres DATA, un valor de .F. instruye a la funci¢n a * devolver una lista de todos los nombres de METHODos. * El valor por defecto es .T. * * es un c¢digo num‚rico opcional para seleccionar cual * tipo de clase se va retornar. * El valor por defecto es HB_MSGLISTALL, retornando la lista entera. * $RETURNS$ * __objGetMsgList() devuelve un array de cadenas con los * nombres de todos los DATA o todos los METHOD para un objeto dado. * __objGetMsgList() podr¡a retornar un array vacio, {} si el objeto * dado no contiene la informaci¢n solicitada. * $DESCRIPTION$ * __objGetMsgList() es una funci¢n de soporte de clases de bajo nivel * que le permite a Ud. encontrar todas las variables de instancia o * los nombre de los metodos para un Objeto dado. * * Si es es especificada, la siguiente tabla muestra los valores para * que le permiten a Ud. distinguir entre DATA y * CLASSDATA: * * * hboo.ch Valor Significado * * HB_MSGLISTALL 0 Todos los tipos * HB_MSGLISTCLASS 1 CLASSDATA solamente * HB_MSGLISTPURE 2 DATA solamente *
* * DATA son variables de instancia usables dentro de cada objeto desde * una clase, donde cada Objeto tiene sus propios DATAs. * * Las CLASSDATA son compartidas por todos los objetos desde una Clase, * asi el valor cambiado dentro del Objeto1 sera reflejado cuando se * acceda la CLASSDATA desde el Objeto2. * $EXAMPLES$ * // Muestra informaci¢n sobre la clase TBrowse * oB := TBrowseNew( 0, 0, 24, 79 ) * aData := __objGetMsgList( oB, .T. ) * aClassData := __objGetMsgList( oB, .T., HB_MSGLISTCLASS ) * aMethod := __objGetMsgList( oB, .F. ) * * FOR i = 1 to len ( aData ) * ? "nombre de DATA:", aData[ i ] * NEXT * * FOR i = 1 to len ( aClassData ) * ? "nombre de CLASSDATA:", aClassData[ i ] * NEXT * * FOR i = 1 to len ( aMethod ) * ? "nombre de METHOD:", aMethod[ i ] * NEXT * * $STATUS$ * R * $COMPLIANCE$ * __objGetMsgList() es una extensi¢n de Harbour. * $FILES$ * El archivo de cabecera es hboo.ch * La librer¡a es rtl * $SEEALSO$ * __ObjGetMethodList(),__ObjGetValueList(),__objHasData(),__objHasMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objGetMethodList() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Retorna un array con los nombres de todos los METHOD de un Objeto * $SYNTAX$ * __objGetMethodList( ) --> aNombreMetodos * $ARGUMENTS$ * es el objeto a inspeccionar * $RETURNS$ * __objGetMethodList() devuelve un array de cadenas * con los nombres de todos los METHOD para un objeto dado. * __objGetMethodList() podria retornar un array vacio, {} si el * objeto dado no contiene ningun metodo. * $DESCRIPTION$ * __objGetMethodList() es una funci¢n de soporte de clases de bajo * nivel que le permite a Ud. encontrar todos los nombres de las * funciones de clase para un Objeto dado. * Es el equivalente a __objGetMsgList( oObjeto, .F. ). * $EXAMPLES$ * // Muestra informaci¢n sobre la clase TBrowse * oB := TBrowseNew( 0, 0, 24, 79 ) * aMethod := __objGetMethodList( oB ) * * FOR i = 1 to len ( aMethod ) * ? "METHOD name:", aMethod[ i ] * NEXT * * $STATUS$ * R * $COMPLIANCE$ * __objGetMethodList() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objGetMsgList(),__ObjGetValueList(),__objHasData(),__objHasMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objGetValueList() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Retorna un array con los nombres de DATA y valores de un Objeto * $SYNTAX$ * __objGetValueList( , [] ) --> aData * $ARGUMENTS$ * es el objeto a inspeccionar * * es un array opcional con los nombres de los DATA que Ud. * desea excluir de la inspeccion. * $RETURNS$ * __objGetValueList() retorna un array bidimensional que contiene * pares de nombre del s¡mbolo DATA y el valor de DATA. * __objGetValueList() podria retornar un array vacio, {} si el * objeto dado no contiene la informaci¢n solicitada. * $DESCRIPTION$ * __objGetValueList() es una funci¢n de soporte de clases de bajo * nivel que retorna un array con los nombres de DATA y valores. * Cada elemento del array es un par de: * aData[ i, HB_OO_DATA_SYMBOL ] contiene nombre del s¡mbolo * aData[ i, HB_OO_DATA_VALUE ] contiene el valor de DATA * $EXAMPLES$ * // Muestra informaci¢n sobre la clase TBrowse * oB := TBrowseNew( 0, 0, 24, 79 ) * aData := __objGetValueList( oB ) * * FOR i = 1 to len ( aData ) * ? "Nombre de DATA:", aData[ i, HB_OO_DATA_SYMBOL ], ; * " valor =", aData[ i, HB_OO_DATA_VALUE ] * NEXT * * $STATUS$ * R * $COMPLIANCE$ * __objGetValueList() es una extensi¢n de Harbour. * $FILES$ * El archivo de cabecera es hboo.ch * La librer¡a es rtl * $SEEALSO$ * __objGetMethodList(),__objGetMsgList(),__objHasData(),__objHasMethod(),__ObjSetValueList() * $END$ */ /* $DOC$ * $FUNCNAME$ * __ObjSetValueList() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Establece un Objeto con un array de nombres de DATA y valores * $SYNTAX$ * __ObjSetValueList( , ) --> oObjeto * $ARGUMENTS$ * es el objeto a establecer * * es un array bidimensional con un par de variables de * instancia y valores para asignar a aquellas variables. * $RETURNS$ * __ObjSetValueList() retorna una referencia a . * $DESCRIPTION$ * __ObjSetValueList() es una funci¢n de soporte de clases de bajo * nivel que le permite a Ud. establecer un grupo de variables de * instancia con valores. * Cada elemento del array en es un par de: * aData[ i, HB_OO_DATA_SYMBOL ] contiene nombre de variable a setear * aData[ i, HB_OO_DATA_VALUE ] contiene el nuevo valor de variable * $EXAMPLES$ * // set some TBrowse instance variable * oB := TBrowse():New() * aData := array( 4, 2 ) * aData[ 1, HB_OO_DATA_SYMBOL ] = "nTop" * aData[ 1, HB_OO_DATA_VALUE ] = 1 * aData[ 2, HB_OO_DATA_SYMBOL ] = "nLeft" * aData[ 2, HB_OO_DATA_VALUE ] = 10 * aData[ 3, HB_OO_DATA_SYMBOL ] = "nBottom" * aData[ 3, HB_OO_DATA_VALUE ] = 20 * aData[ 4, HB_OO_DATA_SYMBOL ] = "nRight" * aData[ 4, HB_OO_DATA_VALUE ] = 70 * __ObjSetValueList( oB, aData ) * ? oB:nTop // 1 * ? oB:nLeft // 10 * ? oB:nBottom // 20 * ? oB:nRight // 70 * * $STATUS$ * R * $COMPLIANCE$ * __ObjSetValueList() es una extensi¢n de Harbour. * $FILES$ * El archivo de cabecera es hboo.ch * La librer¡a es rtl * $SEEALSO$ * __ObjGetValueList() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objAddMethod() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Agrega un METHOD a una clase ya existente * $SYNTAX$ * __objAddMethod( , , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del nuevo METHOD a agregar * * es un puntero a la funci¢n a asociar con el m‚todo * $RETURNS$ * __objAddMethod() retorna una referencia a . * $DESCRIPTION$ * __objAddMethod() es una funci¢n de soporte de clases de bajo * nivel que agrega un nuevo METHOD a un Objeto. * * El permanece sin cambios si el s¡mbolo con el nombre * ya existe en . * * Note que es un especial puntero a una funci¢n que fue * creado usando el operador @ , vea un ejemplo a continuacion. * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un m‚todo Smile * oHappy := HBClass():New( "THappy" ) * __objAddMethod( oHappy, "Smile", @MySmile() ) * ? oHappy:Smile( 1 ) // :) * ? oHappy:Smile( 2 ) // ;) * ? oHappy:Smile( 3 ) // *SMILE* * * STATIC FUNCTION MySmile( nType ) * LOCAL cSmile * DO CASE * CASE nType == 1 * cSmile := ":)" * CASE nType == 2 * cSmile := ";)" * CASE nType == 3 * cSmile := "*SMILE*" * ENDCASE * RETURN cSmile * * $STATUS$ * R * $COMPLIANCE$ * __objAddMethod() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddInline(),__objAddData(),__objDelMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objAddInline() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Agrega un INLINE a una clase ya existente * $SYNTAX$ * __objAddInline( , , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del nuevo INLINE a agregar * * es un codeblock a asociar con el m‚todo INLINE * $RETURNS$ * __objAddInline() retorna una referencia a . * $DESCRIPTION$ * __objAddInline() es una funci¢n de soporte de clases de bajo * nivel que agrega un nuevo m‚todo INLINE a un Objeto. * * El permanece sin cambios si el s¡mbolo con el nombre * ya existe en . * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un m‚todo INLINE Smile * oHappy := HBClass():New( "THappy" ) * bInline := { | nType | { ":)", ";)", "*SMILE*" }[ nType ] } * * __objAddInline( oHappy, "Smile", bInline ) * * ? oHappy:Smile( 1 ) // :) * ? oHappy:Smile( 2 ) // ;) * ? oHappy:Smile( 3 ) // *SMILE* * * $STATUS$ * R * $COMPLIANCE$ * __objAddInline() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddData(),__objAddMethod(),__objDelInline(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod() ,__objModInline() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objAddData() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Agrega un DATA a una clase ya existente * $SYNTAX$ * __objAddData( , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del nuevo DATA a agregar * $RETURNS$ * __objAddData() retorna una referencia a . * $DESCRIPTION$ * __objAddData() es una funci¢n de soporte de clases de bajo * nivel que agrega un nuevo DATA a un Objeto. * * El permanece sin cambios si el s¡mbolo con el nombre * ya existe en . * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un DATA lHappy * oHappy := HBClass():New( "THappy" ) * * __objAddData( oHappy, "lHappy" ) * oHappy:lHappy := .T. * * IF oHappy:lHappy * ? "Happy, Happy, Joy, Joy !!!" * ELSE * ? ":(..." * ENDIF * * $STATUS$ * R * $COMPLIANCE$ * __objAddData() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddInline(),__objAddMethod(),__objDelData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objModMethod() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Modifica (reemplaza) un METHOD en una clase ya existente * $SYNTAX$ * __objModMethod( , , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del METHOD a modificar * * es un puntero a una nueva funci¢n a asociar con * el metodo. * $RETURNS$ * __objModMethod() retorna una referencia a . * $DESCRIPTION$ * __objModMethod() es una funci¢n de soporte de clases de bajo * nivel que modifica un METHOD en un Objeto y lo reemplaza con * una nueva funci¢n. * El permanece sin cambios si el s¡mbolo con el nombre * ya existe en . * __objModMethod() es usado en el mecanismo de herencia. * * Note que es un especial puntero a una funci¢n que fue * creado usando el operador @ , vea un ejemplo a continuacion. * * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un m‚todo Smile * oHappy := HBClass():New( "THappy" ) * __objAddMethod( oHappy, "Smile", @MySmile() ) * ? oHappy:Smile( 1 ) // :) * ? oHappy:Smile( 2 ) // ;) * * // reemplaza el m‚todo Smile con una nueva funci¢n * __objAddMethod( oHappy, "Smile", @YourSmile() ) * ? oHappy:Smile( 1 ) // *SMILE* * ? oHappy:Smile( 2 ) // *WINK* * * STATIC FUNCTION MySmile( nType ) * LOCAL cSmile * DO CASE * CASE nType == 1 * cSmile := ":)" * CASE nType == 2 * cSmile := ";)" * ENDCASE * RETURN cSmile * * STATIC FUNCTION YourSmile( nType ) * LOCAL cSmile * DO CASE * CASE nType == 1 * cSmile := "*SMILE*" * CASE nType == 2 * cSmile := "*WINK*" * ENDCASE * RETURN cSmile * * $STATUS$ * R * $COMPLIANCE$ * __objModMethod() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddMethod(),__objDelMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objModInline() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Modifica (reemplaza) un m‚todo INLINE en una clase ya existente * $SYNTAX$ * __objModInline( , , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del m‚todo INLINE a * modificar. * * es un nuevo codeblock a asociar con el m‚todo INLINE * $RETURNS$ * __objModInline() retorna una referencia a . * $DESCRIPTION$ * __objModInline() es una funci¢n de soporte de clases de bajo * nivel que modifica un m‚todo INLINE en un Objeto y lo reemplaza con * una nuevo bloque de codigo. * * El permanece sin cambios si el s¡mbolo con el nombre * no existe en . * * __objModInline() es usado en el mecanismo de herencia. * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un m‚todo INLINE Smile * oHappy := HBClass():New( "THappy" ) * bMyInline := { | nType | { ":)", ";)" }[ nType ] } * bYourInline := { | nType | { "*SMILE*", "*WINK*" }[ nType ] } * * __objAddInline( oHappy, "Smile", bMyInline ) * ? oHappy:Smile( 1 ) // :) * ? oHappy:Smile( 2 ) // ;) * * // reemplaza el m‚todo INLINE Smile con un nuevo codeblock * __objModInline( oHappy, "Smile", bYourInline ) * ? oHappy:Smile( 1 ) // *SMILE* * ? oHappy:Smile( 2 ) // *WINK* * * $STATUS$ * R * $COMPLIANCE$ * __objModInline() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddInline(),__objDelInline(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objDelMethod() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Borra un METHOD de una clase * $SYNTAX$ * __objDelMethod( , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del METHOD o del m‚todo * INLINE a ser borrado (removido) del Objeto. * $RETURNS$ * __objDelMethod() retorna una referencia a . * $DESCRIPTION$ * __objDelMethod() es una funci¢n de soporte de clases de bajo nivel * que borra (remueve) un METHOD o un m‚todo INLINE de un Objeto. * * El permanece sin cambios si el s¡mbolo con el nombre * no existe en . * * __objDelInline() es exactamente la misma que __objDelMethod(). * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un m‚todo Smile * oHappy := HBClass():New( "THappy" ) * * __objAddMethod( oHappy, "Smile", @MySmile() ) * ? __objHasMethod( oHappy, "Smile" ) // .T. * * // borra el m‚todo Smile * __objDelMethod( oHappy, "Smile" ) * ? __objHasMethod( oHappy, "Smile" ) // .F. * * STATIC FUNCTION MySmile( nType ) * LOCAL cSmile * DO CASE * CASE nType == 1 * cSmile := ":)" * CASE nType == 2 * cSmile := ";)" * ENDCASE * RETURN cSmile * * $STATUS$ * R * $COMPLIANCE$ * __objDelMethod() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddInline(),__objAddMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModInline(),__objModMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objDelInline() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Borra un METHOD INLINE de una clase * $SYNTAX$ * __objDelInline( , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo del METHOD o del m‚todo * INLINE a ser borrado (removido) del Objeto. * $RETURNS$ * __objDelInMethod() retorna una referencia a . * $DESCRIPTION$ * __objDelInMethod() es una funci¢n de soporte de clases de bajo nivel * que borra (remueve) un METHOD o un m‚todo INLINE de un Objeto. * * El permanece sin cambios si el s¡mbolo con el nombre * no existe en . * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un m‚todo Smile * oHappy := HBClass():New( "THappy" ) * __objAddMethod( oHappy, "Smile", @MySmile() ) * ? __objHasMethod( oHappy, "Smile" ) // .T. * * // borra el m‚todo Smile * __objDelInMethod( oHappy, "Smile" ) * ? __objHasMethod( oHappy, "Smile" ) // .F. * * STATIC FUNCTION MySmile( nType ) * LOCAL cSmile * DO CASE * CASE nType == 1 * cSmile := ":)" * CASE nType == 2 * cSmile := ";)" * ENDCASE * RETURN cSmile * * $STATUS$ * R * $COMPLIANCE$ * __objDelMethod() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddInline(),__objAddMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModInline(),__objModMethod() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objDelData() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Borra un DATA (variable de instancia) de una clase * $SYNTAX$ * __objDelMethod( , ) --> oObjeto * $ARGUMENTS$ * es el objeto con el cual se va a trabajar * * es el nombre del s¡mbolo DATA a ser borrado * (removido) del Objeto. * $RETURNS$ * __objDelData() retorna una referencia a . * $DESCRIPTION$ * __objDelData() es una funci¢n de soporte de clases de bajo nivel * que borra (remueve) un DATA de un Objeto. * * El permanece sin cambios si el s¡mbolo con el nombre * no existe en . * $EXAMPLES$ * // crea un nueva clase THappy y le agrega un DATA lHappy * oHappy := HBClass():New( "THappy" ) * * __objAddData( oHappy, "lHappy" ) * ? __objHasData( oHappy, "lHappy" ) // .T. * * // borra el DATA, lHappy * __objDelData( oHappy, "lHappy" ) * ? __objHasData( oHappy, "lHappy" ) // .F. * * $STATUS$ * R * $COMPLIANCE$ * __objDelData() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objAddData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList() * $END$ */ /* $DOC$ * $FUNCNAME$ * __objDerivedFrom() * $CATEGORY$ * Manejo de objetos * $ONELINER$ * Determina cuando una clase es derivada de otra clase * $SYNTAX$ * __objDerivedFrom( , ) --> lIsParent * $ARGUMENTS$ * es el objeto a inspeccionar * * es el objeto que puede ser un padre. puede * ser o bien un Objeto o una cadena de caracteres con el * nombre de la clase. * $RETURNS$ * __objDerivedFrom() retorna un valor logico TRUE (.T.) si el * es derivado de . * $DESCRIPTION$ * __objDerivedFrom() es una funci¢n de soporte de clases de bajo * nivel que chequea si una clase es una Superclase de la otra, o en * otras palabras si la clase es una clase hija o * descendiente de . * $EXAMPLES$ * // Crea tres clases y chequea sus relaciones * * #include "hbclass.ch" * FUNCTION main() * LOCAL oSuper, oObjeto, oDress * oSuper := TMood():New() * oObjeto := THappy():New() * oDress := TShirt():New() * ? __objDerivedFrom( oObjeto, oSuper ) // .T. * ? __objDerivedFrom( oSuper, oObjeto ) // .F. * ? __objDerivedFrom( oObjeto, oDress ) // .F. * RETURN NIL * * CLASS TMood * METHOD New() INLINE Self * ENDCLASS * * CLASS THappy FROM TMood * METHOD Smile() INLINE qout( "*smile*" ) * ENDCLASS * * CLASS TShirt * DATA Color * DATA Size * METHOD New() INLINE Self * ENDCLASS * * $STATUS$ * R * $COMPLIANCE$ * __objDerivedFrom() es una extensi¢n de Harbour. * $FILES$ * La librer¡a es rtl * $SEEALSO$ * __objHasData(),__ObjHasMethod() * $END$ */