Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Metodo rapido para bloquar componentes?? (https://www.clubdelphi.com/foros/showthread.php?t=11973)

burasu 01-07-2004 09:35:35

Metodo rapido para bloquar componentes??
 
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 ;)

Código Delphi [-]
  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


La franja horaria es GMT +2. Ahora son las 21:14:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi