Una Clase para obtener todos los objetos de un formulario y retornarlos dentro de un objeto Collection (VFP8 en adelante) mejorando por tanto la manera de acceder a ellos por clave.
******** CODIGO DE EJEMPLO *******
_SCREEN.ADDOBJECT('txtFldA', 'TextBox')
_SCREEN.ADDOBJECT('txtFldB', 'TextBox')
_SCREEN.ADDOBJECT('txtFldC', 'TextBox')
_SCREEN.ADDOBJECT('txtFldD', 'TextBox')
LOCAL loCol AS Collection
loCol = CREATEOBJECT('collection')
? COBJECTS(loCol, _SCREEN)
? loCol(3).NAME
? loCol(3).VISIBLE
loCol('txtFldC').TOP = 100
loCol('txtFldC').VALUE = 'Prueba'
loCol('txtFldC').VISIBLE = .T.
*!* Nota: Es conveniente que la vida de la coleccion sea la mas corta posible
*!* con el fin de evitar errores de garbaje o de collecion de basura ya que
*!* la coleccion guarda refrencias a muchos objetos cuya vida no se asegura
RELEASE loCol
RETURN
**********************************
*!* Devuelve todos los objetos contenidos en contenedor
*!* Sintaxis: COBJECTS(toCol, toCnt)
*!* Retorno: lnRetVal
*!* Argumentos: toCol especifica la coleccion de retorno con los objetos contenidos
*!* debe declararse en el programa que invoca la funcion y pasarse
*!* por referencia toCnt especifica el objeto contenedor que se va a examinar
*!*
*!* Nota: Como la funcion es recursiva para darle mas rapidez no hacemos
*!* comprobaciones sobre la validez de los parametros enviados
*!* por lo que confiamos que toCol se haya declarado, pasado por
*!* referencia y que toCnt realmente sea un objeto contenedor
FUNCTION COBJECTS
LPARAMETERS toCol AS Collection, toCnt AS OBJECT
LOCAL loCtrl AS OBJECT, loPage AS OBJECT, loColu AS OBJECT, lcClass AS CHARACTER, ;
lnKey AS INTEGER, lcKey AS CHARACTER, lnRetVal AS INTEGER
FOR EACH loCtrl IN toCnt.CONTROLS
*!* Valores
lcClass = UPPER(loCtrl.BASECLASS)
*!* Buscar una key valida
FOR lnKey = 0 TO 32767
lcKey = loCtrl.NAME + ALLTRIM(TRANSFORM(lnKey, @Z'))
IF toCol.GetKey(lcKey) = 0
EXIT
ENDIF
ENDFOR
*!* Agregar control a la coleccion
toCol.ADD(loCtrl, lcKey)
*!* Recursivo
DO CASE
CASE lcClass = 'PAGEFRAME'
*!* Recorrer las paginas
FOR EACH loPage IN loCtrl.PAGES
COBJECTS(toCol, loPage)
ENDFOR
CASE lcClass = 'GRID'
*!* Recorrer las columnas
FOR EACH loColu IN loCtrl.COLUMNS
COBJECTS(toCol, loColu)
ENDFOR
CASE lcClass = 'CONTROL'
*!* El un objeto control no puede ser recorrido
*!* aunque tenga la propiedad ControlCount
CASE PEMSTATUS(loCtrl, 'ControlCount', 5)
*!* Recorre objeto contenedor
COBJECTS(toCol, loCtrl)
CASE PEMSTATUS(loCtrl, 'ButtonCount', 5)
*!* Recorre botones
FOR EACH loCtrl IN loCtrl.BUTTONS
*!* Buscar una key valida
FOR lnKey = 0 TO 32767
lcKey = loCtrl.NAME + ALLTRIM(TRANSFORM(lnKey, @Z'))
IF toCol.GetKey(lcKey) = 0
EXIT
ENDIF
ENDFOR
*!* Agregar control a la coleccion
toCol.ADD(loCtrl, lcKey)
ENDFOR
ENDCASE
ENDFOR
*!* Valor retorno
lnRetVal = toCol.COUNT
*!* Retorno
RETURN lnRetVal
ENDFUNC
**********************************
Enjoy It...
Alexandre Hedreville
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.