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 20-05-2012
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Solo acceder a componentes de un TPanel

Hola:
En una ventana tengo varios Panels en uno de ellos hay varios componentes, los cuales debo colocar y modificar sus propiedades dependiendo del perfil del usuario. En definitiva se arman varias plantillas, las propiedades de los componentes estan en un TClientDataSet en memoria, para hacer esto utilizo el siguiente código: (el Nombre del panel es PanSrv y del ClientDataset es Mapa)

Código Delphi [-]
 
for i := 0 to ComponentCount - 1 do begin
   if Components[i].GetParentComponent.Name = 'PanSrv' then begin
       if (Components[i] is TLabel) then begin
         TLabel(Components[i]).Left := MapaIzq.Value;
         TLabel(Components[i]).Top := MapaArr.Value;
         TLabel(Components[i]).Caption := MapaTexto.Value;
         TLabel(Components[i]).Width := MapaAncho.Value;
         TLabel(Components[i]).Visible := MapaVisible.Value;
       end
       else if (Components[i] is TEdit) then begin
         TEdit(Components[i]).Left := MapaIzq.Value;
         TEdit(Components[i]).Top := MapaArr.Value;
         TEdit(Components[i]).Width := MapaAncho.Value;
         TEdit(Components[i]).Visible := MapaVisible.Value;
         TEdit(Components[i]).TabOrder := MapaOrden.Value;
       end;
   end;
end;

este código funciona perfectamente, pero como podrán comprobar necesito recorrer todos los componentes del TForm, y son muchos, lo cual es rápido pero no es lo mas eficiente, así que pense recorrer solo los componentes del TPanel y realice este código:

Código Delphi [-]
 
with PanSrv do begin
  for i := 0 to ComponentCount - 1 do begin
    if (Components[i] is TLabel) then begin
      TLabel(Components[i]).Left := MapaIzq.Value;
      TLabel(Components[i]).Top := MapaArr.Value;
      TLabel(Components[i]).Caption := MapaTexto.Value;
      TLabel(Components[i]).Width := MapaAncho.Value;
      TLabel(Components[i]).Visible := MapaVisible.Value;
    end
    else if (Components[i] is TEdit) then begin
      TEdit(Components[i]).Left := MapaIzq.Value;
      TEdit(Components[i]).Top := MapaArr.Value;
      TEdit(Components[i]).Width := MapaAncho.Value;
      TEdit(Components[i]).Visible := MapaVisible.Value;
      TEdit(Components[i]).TabOrder := MapaOrden.Value;
    end;
  end;
end;

Para mi sorpresa este código no funciona porque PanSrv.ComponentCount siempre devuelve cero , sencillamente no se ejecuta.

Alguien me puede decir que estoy haciendo mal.

Muchas gracias
Responder Con Cita
  #2  
Antiguo 20-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gcaffe.

Para aclarar el concepto, revisá este [ hilo ].

Entonces podría ser:
Código Delphi [-]
  with PanSvr do
    for i := 0 to ControlCount - 1 do
    begin
      if (Controls[i] is TLabel) then
      begin
        TLabel(Controls[i]).Left := MapaIzq.Value;
        TLabel(Controls[i]).Top := MapaArr.Value;
        TLabel(Controls[i]).Caption := MapaTexto.Value;
        TLabel(Controls[i]).Width := MapaAncho.Value;
        TLabel(Controls[i]).Visible := MapaVisible.Value;
      end
      else if (Controls[i] is TEdit) then
      begin
        TEdit(Controls[i]).Left := MapaIzq.Value;
        TEdit(Controls[i]).Top := MapaArr.Value;
        TEdit(Controls[i]).Width := MapaAncho.Value;
        TEdit(Controls[i]).Visible := MapaVisible.Value;
        TEdit(Controls[i]).TabOrder := MapaOrden.Value;
      end;
    end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 20-05-2012
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Hola ecfisa:

Muchas gracias por tu respuesta, la probé y funcionó.

Un saludo
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
Acceder a componentes de otro form alexisenp OOP 7 12-12-2011 01:53:32
Acceder a un objeto sabiendo solo el nombre jmrp C++ Builder 5 16-09-2011 15:00:32
Acceder a propiedades componentes de un form José Luis Garcí OOP 15 20-03-2010 11:33:38
ControlAtPos y componentes colocados sobre un TPanel gluglu Varios 4 21-08-2007 18:30:24
Como acceder a los componentes de un frame? CORBATIN OOP 7 25-07-2003 20:24:23


La franja horaria es GMT +2. Ahora son las 03:48:20.


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