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.