Blog sobre programación en VFP, Actualizado por Jorge Mota en Guatemala ;)



Desarrollo & Ideas 10 de Enero del 2007 04:32 am

Estableciendo una Forma a solo lectura: iReadOnly

, , , , , , ,

En algunas ocasiones, necesitamos que una forma bajo ciertas circunstancias muestre su contenido, pero de solo lectura para la mayoría de los controles, normalmente bajo los accesos de usuario, estado del registro, etc.

Recientemente me he visto en esa necesidad, así que nada más práctico que crear una clase que me permita hacer ese trabajo, aunque con una pequeña observación, yo no acostumbro usar la propiedad ReadOnly de un control para deshabilitar el acceso, prefiero utilizar Enabled = .f., y la clase hace su trabajo así, deshabilitando controles, y por que se preguntarán, pues debido a que algunas veces necesito que carguen la forma, y para ciertos registros puedan editar la información, pero para otros, no puedan ni siquiera acceder al contenido de los pageframes, o navegar por los grids.

La clase cuenta con 2 propiedades importantes:

  • icExcluir
  • que indica que clases base no queremos procesar (labels, timers, shapes, etc), debe ser una lista al estilo: “shape”,”timer” incluyendo las comillas.

  • ilContenedores
  • nos permite indicar si la clase deshabilitará los controles contenedores también, tal es el caso de los pageframe, pages,grids, container. para que el usuario no los pueda usar.

También cuenta con una propiedad ilReadOnly que nos indica si la forma se encuentra en solo lectura (.T.) o acceso normal (.F.), que puede utilizar en cualquier momento para saber el estado del acceso.

El método que se debe invocar para alternar entre acceso normal y solo lectura es SetReadonly() podiendole indicar el estado al que queremos establecer, mandandolo a llamar con el parametro .T., establece a solo lectura la forma, con parametro .f. o vacío, se establece en acceso normal (subsecuentes llamadas del mismo método sin parametros alternará entre solo lectura y acceso normal).

La clase incluye un formulario de ejemplo que permite ver en acción la clase, si el checkbox con el texto “DesHabilitar Objetos contenedores” se establece en .T., al dar clic en el botón “Solo Lectura” no podrá hacer uso del grid, ni del pageframe, por el contrario, si esta en .F., entonces sí podra tener acceso.

La clase cuenta con un método que debe ser reescrito según cada forma “Proceso_Before” en el que puede tomar las consideraciones del caso, para decidir si determinado control se establecen a solo lectura, el método recibe como parametro el control que se esta evaluando, por lo que puede hacer una comparación del tipo:

If oControl = Thisform.MiGrid
	Return .F. &&impide que se deshabilite el control.
Endif

O también del tipo

If Inlist(oControl, Thisform.cmdSave, Thisform.cmdCancel)
	Return .F. &&impide que se deshabilite el control.
Endif

Si el método retorna .F., el control no se deshabilita.

Además si necesita que x Control siempre se mantenga deshabilitado, puede programar el refresh del control para que siempre lo haga, o establecer la propiedad ReadOnly a .T., también, puede establecer siempre la propiedad Enabled = .f. desde Procesa_Before cuando oControl = thisform.controlsiempredeshabilitado.

Para ver el ejemplo y descargar la clase clic acá
http://fox.desdeguate.com/descargas/vfp/iReadOnly.zip

Saludos y hasta la próxima.

, , , , , , ,

Sí vives en México puedes tener un seguro de vida gratis por hasta 750,000 pesos y ganar dinero al mismo tiempo! clic acá para más información.

Nadie ha dicho nada aún, tu puedes ser el primero, comenta!.

Trackback para este post | Suscribete a los comentarios de este post

Vea también:

Deja un comentario, di algo


Quienes visitaron esto, vieron:

  • N/A