Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TComponets no tiene propiedad enabled (https://www.clubdelphi.com/foros/showthread.php?t=29137)

lucasarts_18 13-01-2006 04:03:54

TComponets no tiene propiedad enabled
 
Hola a todos:

Como bien dice el título he llegado al momento de poder acceder a esta propiedad, algunos diran porque no lo haré con TControl que es descendiente de TCompoenent y es para los objetos visuales, claro está, el problema es el siguiente, TControl no toma los componentes que están dentro de objetos contenedores como lo es GroupBox.

Código Delphi [-]
Form.Controls[i].Enabled := False;
//Form.Components[i].Enabled := False; esto no funciona

Necesito poder acceder de alguna forma ya que Controlls[i] no puede acceder a los componentes que están dentro de un objeto contenedor...
Espero que se entienda esto..

Nos vamos, y muchas gracias :rolleyes:

roman 13-01-2006 05:14:55

He tenido que leer esto varias veces y aún así no estoy seguro de haber entendido.

Si quieres acceder a los controles dentro de un contenedor entonces debes usar Contenedor.Controls:

Código Delphi [-]
for I := 0 to GroupBox1.ControlCount - 1 do
begin
  GroupBox1.Controls[i].Enabled := false;
end;

// Saludos

lucasarts_18 13-01-2006 13:13:59

Cita:

Empezado por roman
Si quieres acceder a los controles dentro de un contenedor entonces debes usar Contenedor.Controls

Roman, se me acaba de ocurrir una idea con lo que tu dices, tendré que comprobar si ese control es un contenedor de ser así accedo a las propiedades de los controles que están dentro del contenedor (groupbox).

Veré como anda esto, gracias..:)

Saludos..

Ohcan 13-01-2006 14:44:36

Siempre puedes usar la recursividad:
Código Delphi [-]
procedure MirarDentro(Contenedor:TComponent);
var
  I:Integer;
begin
  for I := 0 to Contenedor.ControlCount-1 do
    begin
      if Contenedor.Controls[i] is TGroupBox then //o TPanel o ...
        MirarDentro(Contenedor.Controls[i]);
      //[...] Aquí lo que sea...
    end;  
end;
Lo he escrito "a capón"... pero espero que te sirva de ayuda... (y perdón si hay algún error).

Saludos

Lepe 14-01-2006 14:27:42

Solo una pequeña variante a lo propuesto por Ohcan:
Código Delphi [-]
procedure MirarDentro(Contenedor:TComponent);
var
  I:Integer;
begin
  for I := 0 to Contenedor.ControlCount-1 do
    begin
        MirarDentro(Contenedor.Controls[i]);
      //[...] Aquí lo que sea...
    end;  
end;

Si un contenedor no tiene componentes dentros, se hace su llamada, pero saldrá inmediatamente ;)

saludos

roman 14-01-2006 19:38:10

Cita:

Empezado por Lepe
Si un contenedor no tiene componentes dentros, se hace su llamada, pero saldrá inmediatamente

Es que el punto no es tanto si tiene componentes dentro o no, sino si puede o no tener componentes dentro, esto es, si realmente es un contenedor. Por eso el condicional que pone Ohcan no es gratuito aunque a ambos se les ha pasado el hecho de que ni TComponent ni TControl son contenedores.

La rutina podría quedar así:

Código Delphi [-]
procedure MirarDentro(Contenedor: TWinControl);
var
  I: Integer;

begin
  for I := 0 to Contenedor.ControlCount - 1 do
  begin
    if Contenedor.Controls[i] is TWinControl then
      MirarDentro(TWinControl(Contenedor.Controls[i]))
    
    // código aquí
  end;
end;

Así, el condicional abarca TGroupBox, TPanel, etc. que es, me parece, lo que Ohcan quería indicar con el comentario:

Código Delphi [-]
//o TPanel o ...

// Saludos

Ohcan 16-01-2006 10:15:11

Hola roman

Sin embargo me asalta una duda (ahora mismo no tengo el Delphi a mano y no puedo resolverla):
TEdit también desciende de TWinControl, ¿no? ¿No causaría esto problemas?

Saludos.

lucasarts_18 16-01-2006 13:17:36

Cita:

Empezado por Ohcan
TEdit también desciende de TWinControl, ¿no? ¿No causaría esto problemas?

Según la ayuda de delphi, TWinControl es la clase para todas los controles derivados de windows (widgets clásicos), de ser así, TEdit no debería causar ningún problema.

Hasta Luego -

maeyanes 16-01-2006 16:01:18

Cita:

Empezado por Ohcan
Hola roman

Sin embargo me asalta una duda (ahora mismo no tengo el Delphi a mano y no puedo resolverla):
TEdit también desciende de TWinControl, ¿no? ¿No causaría esto problemas?

Saludos.

No, no causaría problemas, por que al ser descendiente de TWinControl, tiene las propiedades Controls y ControlCount.

Así que se entraría al procedimiento recursivamente, pero saldría de inmediato, ya que Controls estaría vacío para el.




Saludos...


La franja horaria es GMT +2. Ahora son las 10:20:45.

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