Olá José,
Veja se este código te ajuda:
// EXEMPLO (Asignación Automática)
// http://forums.fivetechsupport.com/viewtopic.php?f=6&t=23214
//
//Designed by: Daniel Garcia-Gil [ danielgarciagil@gmail.com ]
//
//Class TPublic
//Create dynamically Datas
//Create "in fly" new methods
FUNCTION MAIN()
LOCAL oP
cls
oP := TPublic():New()
op:nome := "Nome teste"
op:Endereco := "Rua teste"
op:Cidade := "Cidade Teste"
op:Celular := "Telefone Teste"
op:Empresa := "Empresa Teste"
oP:Precio := 1.15
oP:Cantidad := 10
oP:TOTAL := oP:precio * oP:CANTIDAD
? oP:TOTAL
? op:Nome,op:Endereco,op:Cidade,op:celular,op:empresa
op:End()
Test()
RETURN NIL
FUNCTION Test()
local oP := TPublic():New(), aSave, nPos
oP:Add("Codigo") // Defino variable sin valor inicial
oP:Add("Precio", 1.15) // Defino variable con valor inicial
oP:Add("Cantidad", 10 )
oP:Add("TOTAL" )
? oP:Get("Precio")
? oP:Get("CANTIDAD")
// Acceso a variables por prueba/error
oP:Total := oP:Precio * oP:Cantidad
// Definicion y Acceso a variables directamente
oP:Set("Total", oP:Get("precio") * oP:Get("CANTIDAD") )
oP:Del("Total") // Borro una variable
? oP:IsDef("TOTAL") // Varifico si existe una variable
nPos := oP:GetPos("Total") // Obtengo la posición en el array
oP:aVars[nPos,2] := 0 // Modifico el Valor en el array directo
aSave := oP:Save() // Guardo las Variables
oP:Release() // Borro TODAS las variables
oP:Restore( aSave ) // Restauro las variables
oP:End() // Termino
RETURN NIL
#include "hbclass.ch"
//------------------------------------------------//
CLASS TPublic
DATA __hVar__
METHOD New()
METHOD AddData( cData )
METHOD AddMethod( cMethod )
METHOD DelData( cData )
METHOD DelMethod( cMethod )
METHOD IsDefData( cData ) INLINE __objHasData( Self, cData )
METHOD IsDefMethod( cMethod ) INLINE __objHasMethod( Self, cMethod )
METHOD Restore()
METHOD Save()
METHOD SendMsg()
ERROR HANDLER ONERROR()
ENDCLASS
//------------------------------------------------//
METHOD New( ) CLASS TPublic
::__hVar__ = {=>}
return Self
//------------------------------------------------//
METHOD AddData( cData ) CLASS TPublic
if ! __objHasData( Self, cData )
__objAddData( Self, cData )
endif
return nil
//------------------------------------------------//
METHOD AddMethod( cMethod, pFunc )
if ! __objHasMethod( Self, cMethod )
__objAddMethod( Self, cMethod, pFunc )
endif
return nil
//------------------------------------------------//
METHOD DelData( cData ) CLASS TPublic
if ! __objHasData( Self, cData )
__objDelMethod( Self, cData )
endif
return nil
//------------------------------------------------//
METHOD DelMethod( cMethod, pFunc ) CLASS TPublic
if ! __objHasMethod( Self, cMethod )
__objDelMethod( Self, cMethod )
endif
return nil
//------------------------------------------------//
//Return a Array with current data values
METHOD Restore() CLASS TPublic
local b := {| cKey, uValue | ::SendMsg( "_" + cKey, uValue ) }
local aOld := __objGetValueList( Self, HB_OO_DATA_SYMBOL )
#ifndef __XHARBOUR__
hb_HEVAL( ::__hVar__, b )
#else
HEVAL( ::__hVar__, b )
#endif
return aOld
//------------------------------------------------//
/*
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
*/
METHOD Save() CLASS TPublic
local aDatas
local a, cData
aDatas = __objGetValueList( Self, HB_OO_DATA_SYMBOL )
for each a in aDatas
cData = Upper( a[ 1 ] )
if cData != "__HVAR__"
::__hVar__[ cData ] = a[ 2 ]
endif
next
RETURN NIL
//------------------------------------------------//
#ifndef __XHARBOUR__
METHOD SendMsg( cMsg, ... ) CLASS TPublic
if "(" $ cMsg
cMsg = StrTran( cMsg, "()", "" )
endif
return __ObjSendMsg( Self, cMsg, ... )
#else
METHOD SendMsg( ... ) CLASS TPublic
local aParams := hb_aParams()
if "(" $ aParams[ 1 ]
aParams[ 1 ] = StrTran( aParams[ 1 ], "()", "" )
endif
ASize( aParams, Len( aParams ) + 1 )
AIns( aParams, 1 )
aParams[ 1 ] = Self
return hb_execFromArray( aParams )
#endif
//------------------------------------------------//
METHOD ONERROR( uParam1 ) CLASS TPublic
local cCol := __GetMessage()
local uRet
if Left( cCol, 1 ) == "_"
cCol = Right( cCol, Len( cCol ) - 1 )
endif
if ! __objHasData( Self, cCol )
::AddData( cCol )
endif
#ifndef __XHARBOUR__
if uParam1 == nil
uRet = __ObjSendMsg( Self, cCol )
else
uRet = __ObjSendMsg( Self, "_" + cCol, uParam1 )
endif
#else
if uParam1 == nil
uRet = hb_execFromArray( Self, cCol )
else
uRet = hb_execFromArray( Self, cCol, { uParam1 } )
endif
#endif
RETURN uRet
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.