Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-09-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
ControlCount de un TPanel

Hola a tod@s, de nuevo por estos barrios

He definido una función que activa/desactiva las etiquetas (TLabel) contenidas en un TPanel, bien una sola o bien todas.

El código es el siguiente:
Código Delphi [-]
{
  activar/desactivar los estados de las TLabel
  - si TODAS = true  entonces Sender es un TPanel
  - si TODAS = false entonces Sender es un TLabel
}
procedure TForm1.ActivarEtiquetas( Sender:TObject; Estado:boolean; Todas:boolean = true );
var
  Contenedor : TPanel;
  Etiqueta   : TLabel;
  i          : integer;
begin
  if Todas then begin
     Contenedor := (Sender as TPanel);
     for i:=0 to Contenedor.ControlCount-1 do
         if( Contenedor.Controls[i] is TLabel ) then begin
             Etiqueta := ( Contenedor.Controls[i] as TLabel ) ;
             Etiqueta.Enabled := Estado;
         end;
  end else (Sender as TLabel).Enabled := Estado;
end;
Bien, el código funciona pero .... (siempre hay un pero), una etiqueta de otro panel se desactiva tambien
¿donde meto la pata?
He leido por aquí que hay otra propiedad para buscar los elementos contenidos en otro, pero ahora soy incapaz de volver a hacelo.

Agradecido
Salvador (salvica)
Responder Con Cita
  #2  
Antiguo 05-09-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
El procedimiento que muestras, lo envías desde algún manejador de eventos o es un manejador de eventos de algún componente que hayas creado?

A simple vista no le veo nada raro...

Código Delphi [-]
procedure TForm1.ActivarEtiquetas(Sender:TObject; Estado, Todas: Boolean);
var
  Contenedor: TPanel;
  Etiqueta: TLabel;
  I: Integer;

begin
  if Todas then
  begin
    Contenedor := (Sender as TPanel);
    for I := 0 to Contenedor.ControlCount - 1 do
      if Contenedor.Controls[i] is TLabel then
        TLabel(Contenedor.Controls[i]).Enabled := Estado
  end
  else
    (Sender as TLabel).Enabled := Estado
end;

La propiedad ControlCount te dice cuantos controles tienen como Parent al control especificado, entonces, Contenedor.ControlCount te indica cuantos controles tienen a Contenedor como Parent...

Ahora, si te fijas, le hice un pequeño cambio a tu código, y este fue que, luego de verificar que Contenedor.Controls[i] is TLabel, ya no es necesario usar el operador as para convertir el control a un TLabel, ya es seguro hacer TLabel(Contenerdor.Controls[i]).Enabled := Estado.


Saludos...
Responder Con Cita
  #3  
Antiguo 05-09-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola maeyanes, gracias por responder.

Me parece que tantas horas tecleando comienza a jugarme extrañas pasadas , el texto original del caption de la etiqueta es "ºC" (el símbolo de la temperatura), la he borrado cuatro o cinco veces, la he vuelto a crear y nada, siempre aparece como desactivada (en modo de diseño inclusive).
Al final he puesto un texto más largo y ya no aparece, por lo que debo creer que son las gafas

Cita:
Empezado por maeyanes Ver Mensaje
El procedimiento que muestras, lo envías desde algún manejador de eventos o es un manejador de eventos de algún componente que hayas creado?
La función la llamo en el OnShow del form.

Se trata de que si al leer una tabla me falta el registro anterior se debe crear con unos datos iniciales y desactivar las entradas del registro actual (por lo que desactivo también las etiquetas para dar mayor realismo)

Cita:
Empezado por maeyanes Ver Mensaje
Código Delphi [-]
    ...
    for I := 0 to Contenedor.ControlCount - 1 do
      if Contenedor.Controls[i] is TLabel then
        TLabel(Contenedor.Controls[i]).Enabled := Estado
    ...

No conocía esta forma de hacer casting, yo siempre lo he hecho:
Código Delphi [-]
(Contenedor.Controls[i] as TLabel).Enabled := Estado
Aquí siempre se aprende algo nuevo
Gracias por la ayuda
Salvador (salvica)
Responder Con Cita
  #4  
Antiguo 05-09-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por salvica Ver Mensaje
Bien, el código funciona pero .... (siempre hay un pero), una etiqueta de otro panel se desactiva tambien
¿donde meto la pata?
¿Estas pasando el contenedor correcto?...

Código Delphi [-]
procedure EnableControls(AContainer: TWinControl; AClass: TControlClass; AValue: Boolean);
var
  i: Integer;
begin
  for i := 0 to AContainer.ControlCount -1 do
    if AContainer.Controls[i] is AClass then
      AContainer.Controls[i].Enabled := AValue;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  EnableControls(Panel1, TLabel, CheckBox1.Checked);
end;
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
OnMouseWheel en TPanel metalfox6383 Varios 3 03-07-2006 20:15:15
Ayuda con ControlCount JerS Varios 12 14-11-2005 21:52:31
Cargar formularios en un TPanel PTW Varios 2 24-05-2005 13:08:21
Array de paneles (TPanel) VRO Varios 2 25-04-2005 11:29:32
TPanel y bucle incompatibles JoseQ Varios 1 03-03-2005 19:30:02


La franja horaria es GMT +2. Ahora son las 22:00:56.


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
Copyright 1996-2007 Club Delphi