PDA

Ver la Versión Completa : Metodo rapido para bloquar componentes??


burasu
01-07-2004, 09:35:35
Hola amigos, tengo que hacer en las pantallas que tengo un control de ver los datos de una base de datos sin poder modificarlos. Para ello uso la misma pantalla que uso para añadir y modificar.

En ella tengo tanto controles edit como controles check, radio y combos. Cada unos distribuidos dentro de paneles y esas cosas.

Existe algún metodo rápdio para bloquear todos los componentes??

marto
01-07-2004, 10:13:16
Recorre la coleccion Components del form. El form será el owner de todos los componentes. Si no usases panels, podrías usar la propiedad Controls y ahorrarte el cast, pero está coleccion tinene que ver con el Parent, así que no nos sirve ;)


for i := 0 to ComponentCount - 1 do
if Components[i] is TControl then
TControl(Components[i]).Enabled := false;

burasu
01-07-2004, 10:32:30
Ese codigo me valdría entonces para todos, pero debo incluirlo tambien en los panels, o no me haría falta??.

marto
01-07-2004, 10:50:57
Components es un array con todos los componentes cuyo owner es el componente en cuestion. Todos los componentes de un form creados en tiempo de diseño tienen como owner al propio form. Dicho esto, ¿si recorremos todos la propiedad components del form, hará falta hacer algo más?

Si no lo ves claro, prúebalo, y verás como NO hace falta hacer nada con los paneles

burasu
01-07-2004, 11:21:15
Perdona que sea un poco pesado, ciertamente el código ese que me has pasado es lo que yo quería, el problema es que no quiero bloquear los botones, pero ya lo he solucionado. Ahora resulta que tengo tambien un frame incorporado en esa pantalla. Que debo añadirle al codigo para que me bloquee las cajas de ese frame??

Gracias

marto
01-07-2004, 11:29:11
Pues hable de memoria, porque no lo he probado, pero creo que el owner de los componentes del frame es el propio frame. Yo crearia un método publico en el frame que deshabilitase/ habilitase sus componentes. Desde el form principal solamente tienes que llamar a este método ;)

burasu
01-07-2004, 11:35:33
Vale pues gracias por todo ;)

roman
01-07-2004, 16:53:48
¡Y no podrías simplemente poner la propiedad ReadOnly del DataSet asociado a los controles en true, al menos mientras se muestra la ventana?

// Saludos

andres1569
01-07-2004, 17:52:39
No puedo evitarlo, cuando veo un hilo con la palabra "componente", enseguida pienso en OOP, más aún si implica como este caso el uso de Polimorfismo. Así que muevo el hilo al foro de OOP.

Por cierto, si tienes los controles agrupados en Panels, ¿no te vale poner a FALSE la propiedad Enabled de los mismos? (ello afecta a los controles que contiene, y si puedes pon los botones en un Panel aparte), o bien podrías hacer uso de la propiedad Tag que trae cualquier componente (si es que no le das otro uso), y recorres todos los componentes deshabilitando sólo los que tengan un determinado Tag, de esta forma puedes definir un comportamiento genérico para todo el formulario/s, sin necesidad de retocar código cada vez para determinar cuál deshabilitar o no (bastaría con modificar desde el Object Inspector). Es una idea.

Saludos